time-compat 1.9.8 → 1.9.9
raw patch · 48 files changed
+5357/−5137 lines, 48 filesdep −taggeddep ~QuickCheckdep ~basedep ~random
Dependencies removed: tagged
Dependency ranges changed: QuickCheck, base, random, tasty, tasty-hunit, time
Files
- CHANGELOG.md +9/−0
- src/Data/Time/Calendar/Compat.hs +5/−97
- src/Data/Time/Calendar/DayPeriod.hs +119/−0
- src/Data/Time/Calendar/Month/Compat.hs +43/−10
- src/Data/Time/Calendar/Quarter/Compat.hs +18/−2
- src/Data/Time/Clock/Compat.hs +45/−1
- src/Data/Time/LocalTime/Compat.hs +2/−0
- src/Data/Time/Orphans.hs +22/−1
- test-instances/Test.hs +6/−0
- test/main/Main.hs +24/−24
- test/main/Test/Arbitrary.hs +117/−95
- test/main/Test/Calendar/AddDays.hs +30/−29
- test/main/Test/Calendar/AddDaysRef.hs +247/−247
- test/main/Test/Calendar/CalendarProps.hs +8/−7
- test/main/Test/Calendar/Calendars.hs +9/−8
- test/main/Test/Calendar/CalendarsRef.hs +6/−6
- test/main/Test/Calendar/ClipDates.hs +16/−17
- test/main/Test/Calendar/ClipDatesRef.hs +567/−567
- test/main/Test/Calendar/ConvertBack.hs +22/−23
- test/main/Test/Calendar/DayPeriod.hs +122/−127
- test/main/Test/Calendar/Duration.hs +60/−63
- test/main/Test/Calendar/Easter.hs +21/−22
- test/main/Test/Calendar/EasterRef.hs +59/−59
- test/main/Test/Calendar/LongWeekYears.hs +18/−17
- test/main/Test/Calendar/LongWeekYearsRef.hs +152/−152
- test/main/Test/Calendar/MonthDay.hs +34/−20
- test/main/Test/Calendar/MonthDayRef.hs +748/−748
- test/main/Test/Calendar/MonthOfYear.hs +16/−15
- test/main/Test/Calendar/Valid.hs +104/−109
- test/main/Test/Calendar/Week.hs +166/−174
- test/main/Test/Calendar/Year.hs +17/−16
- test/main/Test/Clock/Conversion.hs +17/−18
- test/main/Test/Clock/Lift.hs +0/−18
- test/main/Test/Clock/Pattern.hs +31/−0
- test/main/Test/Clock/Resolution.hs +44/−44
- test/main/Test/Clock/TAI.hs +44/−45
- test/main/Test/Format/Compile.hs +7/−16
- test/main/Test/Format/Format.hs +84/−162
- test/main/Test/Format/ISO8601.hs +294/−276
- test/main/Test/Format/ParseTime.hs +959/−881
- test/main/Test/LocalTime/CalendarDiffTime.hs +10/−25
- test/main/Test/LocalTime/Time.hs +62/−67
- test/main/Test/LocalTime/TimeOfDay.hs +15/−18
- test/main/Test/LocalTime/TimeRef.hs +890/−890
- test/main/Test/TestUtil.hs +11/−8
- test/main/Test/Types.hs +1/−1
- test/template/Main.hs +31/−0
- time-compat.cabal +25/−12
CHANGELOG.md view
@@ -1,3 +1,12 @@+# 1.9.9++- Support `time-1.15`+ - add patterns for DiffTime & NominalDiffTime+ - add more Lift instances+ - fix MonthDay and QuarterDay clipping++# 1.9.8+ # 1.9.7 - Drop support for GHCs prior 8.6.5
src/Data/Time/Calendar/Compat.hs view
@@ -2,7 +2,6 @@ {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE PatternSynonyms #-} {-# LANGUAGE ViewPatterns #-}-{-# LANGUAGE TypeSynonymInstances #-} module Data.Time.Calendar.Compat ( -- * Days Day(..),addDays,diffDays,@@ -72,10 +71,6 @@ import Data.Time.Format import Data.Time.Orphans () -#if !MIN_VERSION_time(1,12,1)-import Data.Time.Calendar.Types-#endif- #if !MIN_VERSION_time(1,9,0) import Data.Time.Calendar.WeekDate.Compat #endif@@ -84,15 +79,15 @@ import Data.Time.Calendar.MonthDay.Compat #endif -#if !MIN_VERSION_time(1,12,0)-import Data.Time.Calendar.Types-#endif- #if !MIN_VERSION_time(1,12,1)+import Data.Time.Calendar.Types import Data.Time.Calendar.Month.Compat import Data.Time.Calendar.Quarter.Compat #endif +import Data.Time.Calendar.Types+import Data.Time.Calendar.DayPeriod+ import Control.DeepSeq (NFData (..)) import Data.Data (Data, Typeable) import GHC.Generics (Generic)@@ -100,6 +95,7 @@ import Data.Semigroup (Semigroup (..)) import qualified Language.Haskell.TH.Syntax as TH + ------------------------------------------------------------------------------- -- CalendarDiffTime -------------------------------------------------------------------------------@@ -288,92 +284,4 @@ -- @since 1.12.2 weekLastDay :: DayOfWeek -> Day -> Day weekLastDay firstDay day = pred $ firstDayOfWeekOnAfter firstDay $ succ day-#endif------------------------------------------------------------------------------------ Days----------------------------------------------------------------------------------#if !MIN_VERSION_time(1,12,1)-class Ord p => DayPeriod p where- -- | Returns the first 'Day' in a period of days.- periodFirstDay :: p -> Day-- -- | Returns the last 'Day' in a period of days.- periodLastDay :: p -> Day-- -- | Get the period this day is in.- dayPeriod :: Day -> p---- | A list of all the days in this period.------ @since 1.12.1-periodAllDays :: DayPeriod p => p -> [Day]-periodAllDays p = [periodFirstDay p .. periodLastDay p]---- | The number of days in this period.------ @since 1.12.1-periodLength :: DayPeriod p => p -> Int-periodLength p = succ $ fromInteger $ diffDays (periodLastDay p) (periodFirstDay p)---- | Get the period this day is in, with the 1-based day number within the period.------ @periodFromDay (periodFirstDay p) = (p,1)@------ @since 1.12.1-periodFromDay :: DayPeriod p => Day -> (p, Int)-periodFromDay d =- let- p = dayPeriod d- dt = succ $ fromInteger $ diffDays d $ periodFirstDay p- in- (p, dt)---- | Inverse of 'periodFromDay'.------ @since 1.12.1-periodToDay :: DayPeriod p => p -> Int -> Day-periodToDay p i = addDays (toInteger $ pred i) $ periodFirstDay p---- | Validating inverse of 'periodFromDay'.------ @since 1.12.1-periodToDayValid :: DayPeriod p => p -> Int -> Maybe Day-periodToDayValid p i =- let- d = periodToDay p i- in- if fst (periodFromDay d) == p then Just d else Nothing--instance DayPeriod Day where- periodFirstDay = id- periodLastDay = id- dayPeriod = id--instance DayPeriod Year where- periodFirstDay y = YearMonthDay y January 1- periodLastDay y = YearMonthDay y December 31- dayPeriod (YearMonthDay y _ _) = y--instance DayPeriod Month where- periodFirstDay (YearMonth y m) = YearMonthDay y m 1- periodLastDay (YearMonth y m) = YearMonthDay y m 31 -- clips to correct day- dayPeriod (YearMonthDay y my _) = YearMonth y my--instance DayPeriod Quarter where- periodFirstDay (YearQuarter y q) =- case q of- Q1 -> periodFirstDay $ YearMonth y January- Q2 -> periodFirstDay $ YearMonth y April- Q3 -> periodFirstDay $ YearMonth y July- Q4 -> periodFirstDay $ YearMonth y October- periodLastDay (YearQuarter y q) =- case q of- Q1 -> periodLastDay $ YearMonth y March- Q2 -> periodLastDay $ YearMonth y June- Q3 -> periodLastDay $ YearMonth y September- Q4 -> periodLastDay $ YearMonth y December- dayPeriod (MonthDay m _) = monthQuarter m- #endif
+ src/Data/Time/Calendar/DayPeriod.hs view
@@ -0,0 +1,119 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE TypeSynonymInstances #-}+module Data.Time.Calendar.DayPeriod (+ DayPeriod (..),+ periodAllDays,+ periodLength,+ periodFromDay,+ periodToDay,+ periodToDayClip,+ periodToDayValid,+) where++#if MIN_VERSION_time(1,15,0)+import Data.Time.Calendar++#elif MIN_VERSION_time(1,12,1)+import Data.Time.Calendar+import Data.Time.Calendar.Private++periodToDayClip :: DayPeriod p => p -> Int -> Day+periodToDayClip p i = periodToDay p $ clip 1 (periodLength p) i++#else+import Data.Time.Calendar+import Data.Time.Calendar.Private++#if MIN_VERSION_time(1,11,0)+import Data.Time.Calendar.Month+import Data.Time.Calendar.Quarter+#endif++class Ord p => DayPeriod p where+ -- | Returns the first 'Day' in a period of days.+ periodFirstDay :: p -> Day++ -- | Returns the last 'Day' in a period of days.+ periodLastDay :: p -> Day++ -- | Get the period this day is in.+ dayPeriod :: Day -> p++-- | A list of all the days in this period.+--+-- @since 1.12.1+periodAllDays :: DayPeriod p => p -> [Day]+periodAllDays p = [periodFirstDay p .. periodLastDay p]++-- | The number of days in this period.+--+-- @since 1.12.1+periodLength :: DayPeriod p => p -> Int+periodLength p = succ $ fromInteger $ diffDays (periodLastDay p) (periodFirstDay p)++-- | Get the period this day is in, with the 1-based day number within the period.+--+-- @periodFromDay (periodFirstDay p) = (p,1)@+--+-- @since 1.12.1+periodFromDay :: DayPeriod p => Day -> (p, Int)+periodFromDay d =+ let+ p = dayPeriod d+ dt = succ $ fromInteger $ diffDays d $ periodFirstDay p+ in+ (p, dt)++-- | Inverse of 'periodFromDay'.+--+-- @since 1.12.1+periodToDay :: DayPeriod p => p -> Int -> Day+periodToDay p i = addDays (toInteger $ pred i) $ periodFirstDay p++periodToDayClip :: DayPeriod p => p -> Int -> Day+periodToDayClip p i = periodToDay p $ clip 1 (periodLength p) i++-- | Validating inverse of 'periodFromDay'.+--+-- @since 1.12.1+periodToDayValid :: DayPeriod p => p -> Int -> Maybe Day+periodToDayValid p i =+ let+ d = periodToDay p i+ in+ if fst (periodFromDay d) == p then Just d else Nothing++instance DayPeriod Day where+ periodFirstDay = id+ periodLastDay = id+ dayPeriod = id++-- Year instance+instance DayPeriod Integer where+ periodFirstDay y = fromGregorian y 1 1+ periodLastDay y = fromGregorian y 12 31+ dayPeriod (toGregorian -> (y,_,_)) = y++#if MIN_VERSION_time(1,11,0)+instance DayPeriod Month where+ periodFirstDay (YearMonth y m) = YearMonthDay y m 1+ periodLastDay (YearMonth y m) = YearMonthDay y m 31 -- clips to correct day+ dayPeriod (YearMonthDay y my _) = YearMonth y my++instance DayPeriod Quarter where+ periodFirstDay (YearQuarter y q) =+ case q of+ Q1 -> periodFirstDay $ YearMonth y 1+ Q2 -> periodFirstDay $ YearMonth y 4+ Q3 -> periodFirstDay $ YearMonth y 7+ Q4 -> periodFirstDay $ YearMonth y 10+ periodLastDay (YearQuarter y q) =+ case q of+ Q1 -> periodLastDay $ YearMonth y 3+ Q2 -> periodLastDay $ YearMonth y 6+ Q3 -> periodLastDay $ YearMonth y 9+ Q4 -> periodLastDay $ YearMonth y 12+ dayPeriod (MonthDay m _) = monthQuarter m+#endif++#endif
src/Data/Time/Calendar/Month/Compat.hs view
@@ -12,7 +12,8 @@ toMonthDay, ) where -#if MIN_VERSION_time(1,11,0)+#if MIN_VERSION_time(1,15,0)+ import Data.Time.Calendar import Data.Time.Calendar.Month @@ -32,6 +33,36 @@ toMonthDay :: Day -> (Month,DayOfMonth) toMonthDay (MonthDay m d) = (m, d) +#elif MIN_VERSION_time(1,11,0)++import Data.Time.Calendar (Year,MonthOfYear,Day,DayOfMonth)+import Data.Time.Calendar.DayPeriod+import Data.Time.Calendar.Month hiding (MonthDay)++-- | Part of @YearMonth@ pattern+fromYearMonth :: Year -> MonthOfYear -> Month+fromYearMonth = YearMonth++-- | Part of @YearMonth@ pattern+toYearMonth :: Month -> (Year, MonthOfYear)+toYearMonth (YearMonth y m) = (y, m)++-- | Part of 'MonthDay' pattern+toMonthDay :: Day -> (Month,DayOfMonth)+toMonthDay = periodFromDay++-- | Part of 'MonthDay' pattern+fromMonthDay :: Month -> DayOfMonth -> Day+fromMonthDay = periodToDayClip++-- | Bidirectional abstract constructor.+-- Invalid days of month will be clipped to the correct range.+pattern MonthDay :: Month -> DayOfMonth -> Day+pattern MonthDay m dm <- (toMonthDay -> (m,dm)) where+ MonthDay = fromMonthDay++{-# COMPLETE MonthDay #-}+ #else #if MIN_VERSION_time(1,9,0)@@ -43,8 +74,8 @@ import Data.Time.Calendar import Data.Time.Calendar.Julian import Data.Time.Calendar.Types--- import Data.Time.Calendar.Days import Data.Time.Calendar.Private+import Data.Time.Calendar.DayPeriod import Data.Data import Data.Fixed import Text.Read@@ -137,7 +168,7 @@ fromYearMonthValid :: Year -> MonthOfYear -> Maybe Month fromYearMonthValid y my = do my' <- clipValid 1 12 my- return $ fromYearMonth y my'+ return $ YearMonth y my' -- | Part of @YearMonth@ pattern fromYearMonth :: Year -> MonthOfYear -> Month@@ -158,24 +189,26 @@ -- | Part of 'MonthDay' pattern toMonthDay :: Day -> (Month,DayOfMonth)-toMonthDay d = case toGregorian d of- (y, my, dm) -> (fromYearMonth y my, dm)+toMonthDay = periodFromDay -- | Part of 'MonthDay' pattern fromMonthDay :: Month -> DayOfMonth -> Day-fromMonthDay m dm = case toYearMonth m of- (y, my) -> fromGregorian y my dm+fromMonthDay = periodToDayClip fromMonthDayValid :: Month -> DayOfMonth -> Maybe Day-fromMonthDayValid m dm = case toYearMonth m of- (y, my) -> fromGregorianValid y my dm+fromMonthDayValid = periodToDayValid -- | Bidirectional abstract constructor. -- Invalid days of month will be clipped to the correct range. pattern MonthDay :: Month -> DayOfMonth -> Day pattern MonthDay m dm <- (toMonthDay -> (m,dm)) where- MonthDay (YearMonth y my) dm = fromGregorian y my dm+ MonthDay = fromMonthDay {-# COMPLETE MonthDay #-}++instance DayPeriod Month where+ periodFirstDay (YearMonth y m) = fromGregorian y m 1+ periodLastDay (YearMonth y m) = fromGregorian y m 31 -- clips to correct day+ dayPeriod (toGregorian -> (y, my, _)) = YearMonth y my #endif
src/Data/Time/Calendar/Quarter/Compat.hs view
@@ -40,6 +40,7 @@ import Data.Time.Calendar import Data.Time.Calendar.Types import Data.Time.Calendar.Private+import Data.Time.Calendar.DayPeriod import Data.Time.Calendar.Month.Compat -- | Quarters of each year. Each quarter corresponds to three months.@@ -72,8 +73,8 @@ maxBound = Q4 -- | An absolute count of year quarters.--- Number is equal to @(year * 4) + (quarterOfYear - 1)@.-newtype Quarter = MkQuarter Integer deriving (Eq, Ord, Data, Typeable, Generic)+-- Number is equal to @(year * 6) + (quarterOfYear - 1)@.+newtype Quarter = MkQuarter Integer deriving (Eq, Ord, Data, Typeable, TH.Lift, Generic) instance NFData Quarter where rnf (MkQuarter m) = rnf m@@ -146,5 +147,20 @@ toYearQuarter :: Quarter -> (Year, QuarterOfYear) toYearQuarter (MkQuarter y) = case divMod' y 4 of (y, qy) -> (y, toEnum (succ (fromInteger qy)))++instance DayPeriod Quarter where+ periodFirstDay (YearQuarter y q) =+ case q of+ Q1 -> periodFirstDay $ YearMonth y 1+ Q2 -> periodFirstDay $ YearMonth y 4+ Q3 -> periodFirstDay $ YearMonth y 7+ Q4 -> periodFirstDay $ YearMonth y 10+ periodLastDay (YearQuarter y q) =+ case q of+ Q1 -> periodLastDay $ YearMonth y 3+ Q2 -> periodLastDay $ YearMonth y 6+ Q3 -> periodLastDay $ YearMonth y 9+ Q4 -> periodLastDay $ YearMonth y 12+ dayPeriod (MonthDay m _) = monthQuarter m #endif
src/Data/Time/Clock/Compat.hs view
@@ -7,6 +7,10 @@ -- * Absolute intervals, DiffTime DiffTime,+ pattern Picoseconds,+ pattern Seconds,+ pattern Minutes,+ pattern Hours, secondsToDiffTime, picosecondsToDiffTime, diffTimeToPicoseconds,@@ -16,6 +20,7 @@ -- * NominalDiffTime NominalDiffTime,+ pattern Nominal, secondsToNominalDiffTime, nominalDiffTimeToSeconds, nominalDay,@@ -38,8 +43,47 @@ import Data.Time.Calendar.Types import Data.Time.Clock-import Data.Fixed (Pico)+import Data.Fixed (Pico, Fixed (MkFixed)) import Debug.Trace++#if !MIN_VERSION_time(1,15,0)+pattern Picoseconds :: Integer -> DiffTime+pattern Picoseconds a <- (diffTimeToPicoseconds -> a)+ where+ Picoseconds a = picosecondsToDiffTime a++{-# COMPLETE Picoseconds #-}++pattern Seconds :: Pico -> DiffTime+pattern Seconds a <- (MkFixed . diffTimeToPicoseconds -> a)+ where+ Seconds a = picosecondsToDiffTime (case a of MkFixed a' -> a')++{-# COMPLETE Seconds #-}++pattern Minutes :: Pico -> DiffTime+pattern Minutes a <- Seconds ((/ 60) -> a)+ where+ Minutes a = Seconds $ a * 60++{-# COMPLETE Minutes #-}++pattern Hours :: Pico -> DiffTime+pattern Hours a <- Minutes ((/ 60) -> a)+ where+ Hours a = Minutes $ a * 60++{-# COMPLETE Hours #-}++-- | convert from DiffTime+pattern Nominal :: DiffTime -> NominalDiffTime+pattern Nominal dt <- (Seconds . nominalDiffTimeToSeconds -> dt)+ where+ Nominal dt = secondsToNominalDiffTime (case dt of Seconds dt' -> dt')++{-# COMPLETE Nominal #-}++#endif #if !MIN_VERSION_time(1,9,1)
src/Data/Time/LocalTime/Compat.hs view
@@ -36,6 +36,7 @@ import Data.Time.Clock.Compat import Data.Time.Calendar.Compat import Data.Time.Format.Compat+import qualified Language.Haskell.TH.Syntax as TH import Data.Fixed (Pico (..), showFixed, divMod') import Data.Monoid (Monoid (..))@@ -95,6 +96,7 @@ Data ,Typeable , Generic+ , TH.Lift ) -- | Additive
src/Data/Time/Orphans.hs view
@@ -32,7 +32,7 @@ import Data.Time.Calendar.WeekDate #endif -#if !MIN_VERSION_time(1,14,0)+#if !MIN_VERSION_time(1,15,0) import GHC.Generics (Generic) import qualified Language.Haskell.TH.Syntax as TH import Data.Fixed (Fixed (..), Pico)@@ -132,6 +132,27 @@ ------------------------------------------------------------------------------- -- Lift & Generic -------------------------------------------------------------------------------++#if !MIN_VERSION_time(1,15,0)+deriving instance TH.Lift LocalTime+deriving instance TH.Lift TimeZone+deriving instance TH.Lift ZonedTime++#if MIN_VERSION_time(1,9,2)+deriving instance TH.Lift CalendarDiffTime+#endif++#if MIN_VERSION_time(1,11,0)+deriving instance TH.Lift Quarter+#endif++instance TH.Lift TimeOfDay where+ lift (TimeOfDay h m (MkFixed s)) = [| TimeOfDay h m (MkFixed s) |]++#if MIN_VERSION_template_haskell(2,16,0)+ liftTyped (TimeOfDay h m (MkFixed s)) = [|| TimeOfDay h m (MkFixed s) ||]+#endif+#endif #if !MIN_VERSION_time(1,14,0) deriving instance TH.Lift Day
test-instances/Test.hs view
@@ -60,6 +60,7 @@ , inst (P @TimeZone) (P @FormatTime) , inst (P @TimeZone) (P @ISO8601) , inst (P @TimeZone) (P @ParseTime)+ , inst (P @TimeZone) (P @TH.Lift) , inst (P @TimeOfDay) (P @Data) , inst (P @TimeOfDay) (P @Generic)@@ -71,6 +72,7 @@ , inst (P @TimeOfDay) (P @FormatTime) , inst (P @TimeOfDay) (P @ISO8601) , inst (P @TimeOfDay) (P @ParseTime)+ , inst (P @TimeOfDay) (P @TH.Lift) , inst (P @CalendarDiffTime) (P @Data) , inst (P @CalendarDiffTime) (P @Mon.Monoid)@@ -83,6 +85,7 @@ -- , inst (P @CalendarDiffTime) (P @FormatTime) , inst (P @CalendarDiffTime) (P @ISO8601) -- , inst (P @CalendarDiffTime) (P @ParseTime)+ , inst (P @CalendarDiffTime) (P @TH.Lift) , inst (P @LocalTime) (P @Data) , inst (P @LocalTime) (P @Generic)@@ -94,6 +97,7 @@ , inst (P @LocalTime) (P @FormatTime) , inst (P @LocalTime) (P @ISO8601) , inst (P @LocalTime) (P @ParseTime)+ , inst (P @LocalTime) (P @TH.Lift) , inst (P @ZonedTime) (P @Data) , inst (P @ZonedTime) (P @Generic)@@ -103,6 +107,7 @@ , inst (P @ZonedTime) (P @FormatTime) , inst (P @ZonedTime) (P @ISO8601) , inst (P @ZonedTime) (P @ParseTime)+ , inst (P @ZonedTime) (P @TH.Lift) , inst (P @UniversalTime) (P @Data) , inst (P @UniversalTime) (P @Generic)@@ -201,6 +206,7 @@ , inst (P @Quarter) (P @Eq) , inst (P @Quarter) (P @Ord) , inst (P @Quarter) (P @Generic)+ , inst (P @Quarter) (P @TH.Lift) , inst (P @QuarterOfYear) (P @Data) , inst (P @QuarterOfYear) (P @Read)
test/main/Main.hs view
@@ -15,7 +15,7 @@ import Test.Calendar.Week import Test.Calendar.Year import Test.Clock.Conversion-import Test.Clock.Lift (testLift)+import Test.Clock.Pattern import Test.Clock.Resolution import Test.Clock.TAI import Test.Format.Compile ()@@ -30,29 +30,29 @@ tests :: TestTree tests =- testGroup- "Time"- [ testGroup- "Calendar"- [ addDaysTest- , testCalendarProps- , testCalendars- , clipDates- , convertBack- , longWeekYears- , testDayPeriod- , testMonthDay- , testMonthOfYear- , testEaster- , testValid- , testWeek- , testYear- , testDuration- ]- , testGroup "Clock" [testClockConversion, testResolutions, testTAI, testLift]- -- , testGroup "Format" [testFormat, testParseTime, testISO8601]- , testGroup "LocalTime" [{- testTime, -} testTimeOfDay, testCalendarDiffTime]- ]+ testGroup+ "Time"+ [ testGroup+ "Calendar"+ [ addDaysTest,+ testCalendarProps,+ testCalendars,+ clipDates,+ convertBack,+ longWeekYears,+ testDayPeriod,+ testMonthDay,+ testMonthOfYear,+ testEaster,+ testValid,+ testWeek,+ testYear,+ testDuration+ ],+ testGroup "Clock" [testClockPatterns, testClockConversion, testResolutions, testTAI],+ -- TODO: testGroup "Format" [testFormat, testParseTime, testISO8601],+ testGroup "LocalTime" [{- TODO: testTime, -} testTimeOfDay, testCalendarDiffTime]+ ] main :: IO () main = defaultMain tests
test/main/Test/Arbitrary.hs view
@@ -1,36 +1,71 @@ {-# OPTIONS -fno-warn-orphans #-} -module Test.Arbitrary where+module Test.Arbitrary (supportedDayRange) where import Control.Monad import Data.Fixed import Data.Ratio-import Data.Time.Compat import Data.Time.Calendar.Month.Compat import Data.Time.Calendar.Quarter.Compat import Data.Time.Calendar.WeekDate.Compat import Data.Time.Clock.POSIX.Compat+import Data.Time.Compat import System.Random import Test.Tasty.QuickCheck hiding (reason) instance Arbitrary DayOfWeek where- arbitrary = fmap toEnum $ choose (1, 7)+ arbitrary = fmap toEnum $ choose (1, 7) instance Arbitrary FirstWeekType where- arbitrary = do- b <- arbitrary- return $ if b then FirstWholeWeek else FirstMostWeek+ arbitrary = do+ b <- arbitrary+ return $ if b then FirstWholeWeek else FirstMostWeek deriving instance Show FirstWeekType +deriving instance Random Month++supportedMonthRange :: (Month, Month)+supportedMonthRange = (YearMonth (-9899) 1, YearMonth 9999 12)++shrinkYear :: Integer -> [Integer]+shrinkYear y =+ let yearShrink =+ if y > 2000+ then [pred y]+ else+ if y < 2000+ then [succ y]+ else []+ year10Shrink =+ if y > 2010+ then fmap (\i -> y - i) [1 .. 10]+ else+ if y < 1990+ then fmap (\i -> y + i) [1 .. 10]+ else []+ year100Shrink =+ if y > 2100+ then [y - 100]+ else+ if y < 1900+ then [y + 100]+ else []+ in year100Shrink <> year10Shrink <> yearShrink+ instance Arbitrary Month where- arbitrary = liftM MkMonth $ choose (-30000, 200000)+ arbitrary = choose supportedMonthRange instance Arbitrary Quarter where- arbitrary = liftM MkQuarter $ choose (-30000, 200000)+ arbitrary = fmap monthQuarter arbitrary+ shrink (YearQuarter y qoy) =+ fmap (\y' -> YearQuarter y' qoy) (shrinkYear y)+ <> fmap (YearQuarter y) (shrink qoy) instance Arbitrary QuarterOfYear where- arbitrary = liftM toEnum $ choose (1, 4)+ arbitrary = liftM toEnum $ choose (1, 4)+ shrink Q1 = []+ shrink _ = [Q1] deriving instance Random Day @@ -38,131 +73,118 @@ supportedDayRange = (fromGregorian (-9899) 1 1, fromGregorian 9999 12 31) instance Arbitrary Day where- arbitrary = choose supportedDayRange- shrink day =- let- (y, m, d) = toGregorian day- dayShrink =- if d > 1- then [fromGregorian y m (d - 1)]- else []- monthShrink =- if m > 1- then [fromGregorian y (m - 1) d]- else []- yearShrink =- if y > 2000- then [fromGregorian (y - 1) m d]- else- if y < 2000- then [fromGregorian (y + 1) m d]- else []- in- dayShrink ++ monthShrink ++ yearShrink+ arbitrary = choose supportedDayRange+ shrink day =+ let (y, m, d) = toGregorian day+ dayShrink =+ if d > 1+ then [fromGregorian y m (d - 1)]+ else []+ monthShrink =+ if m > 1+ then [fromGregorian y (m - 1) d]+ else []+ in dayShrink <> monthShrink <> fmap (\y' -> fromGregorian y' m d) (shrinkYear y) instance CoArbitrary Day where- coarbitrary (ModifiedJulianDay d) = coarbitrary d+ coarbitrary (ModifiedJulianDay d) = coarbitrary d instance Arbitrary CalendarDiffDays where- arbitrary = liftM2 CalendarDiffDays arbitrary arbitrary+ arbitrary = liftM2 CalendarDiffDays arbitrary arbitrary instance Arbitrary DiffTime where- arbitrary = oneof [intSecs, fracSecs] -- up to 1 leap second- where- intSecs = liftM secondsToDiffTime' $ choose (0, 86400)- fracSecs = liftM picosecondsToDiffTime' $ choose (0, 86400 * 10 ^ (12 :: Int))- secondsToDiffTime' :: Integer -> DiffTime- secondsToDiffTime' = fromInteger- picosecondsToDiffTime' :: Integer -> DiffTime- picosecondsToDiffTime' x = fromRational (x % 10 ^ (12 :: Int))+ arbitrary = oneof [intSecs, fracSecs] -- up to 1 leap second+ where+ intSecs = liftM secondsToDiffTime' $ choose (0, 86400)+ fracSecs = liftM picosecondsToDiffTime' $ choose (0, 86400 * 10 ^ (12 :: Int))+ secondsToDiffTime' :: Integer -> DiffTime+ secondsToDiffTime' = fromInteger+ picosecondsToDiffTime' :: Integer -> DiffTime+ picosecondsToDiffTime' x = fromRational (x % 10 ^ (12 :: Int)) instance CoArbitrary DiffTime where- coarbitrary t = coarbitrary (fromEnum t)+ coarbitrary t = coarbitrary (fromEnum t) instance Arbitrary NominalDiffTime where- arbitrary = oneof [intSecs, fracSecs]- where- limit = 1000 * 86400- picofactor = 10 ^ (12 :: Int)- intSecs = liftM secondsToDiffTime' $ choose (negate limit, limit)- fracSecs = liftM picosecondsToDiffTime' $ choose (negate limit * picofactor, limit * picofactor)- secondsToDiffTime' :: Integer -> NominalDiffTime- secondsToDiffTime' = fromInteger- picosecondsToDiffTime' :: Integer -> NominalDiffTime- picosecondsToDiffTime' x = fromRational (x % 10 ^ (12 :: Int))+ arbitrary = oneof [intSecs, fracSecs]+ where+ limit = 1000 * 86400+ picofactor = 10 ^ (12 :: Int)+ intSecs = liftM secondsToDiffTime' $ choose (negate limit, limit)+ fracSecs = liftM picosecondsToDiffTime' $ choose (negate limit * picofactor, limit * picofactor)+ secondsToDiffTime' :: Integer -> NominalDiffTime+ secondsToDiffTime' = fromInteger+ picosecondsToDiffTime' :: Integer -> NominalDiffTime+ picosecondsToDiffTime' x = fromRational (x % 10 ^ (12 :: Int)) instance CoArbitrary NominalDiffTime where- coarbitrary t = coarbitrary (fromEnum t)+ coarbitrary t = coarbitrary (fromEnum t) instance Arbitrary CalendarDiffTime where- arbitrary = liftM2 CalendarDiffTime arbitrary arbitrary+ arbitrary = liftM2 CalendarDiffTime arbitrary arbitrary reduceDigits :: Int -> Pico -> Maybe Pico reduceDigits (-1) _ = Nothing reduceDigits n x =- let- d :: Pico- d = 10 ^^ (negate n)- r = mod' x d- in- case r of- 0 -> reduceDigits (n - 1) x- _ -> Just $ x - r+ let d :: Pico+ d = 10 ^^ (negate n)+ r = mod' x d+ in case r of+ 0 -> reduceDigits (n - 1) x+ _ -> Just $ x - r instance Arbitrary TimeOfDay where- arbitrary = liftM timeToTimeOfDay arbitrary- shrink (TimeOfDay h m s) =- let- shrinkInt 0 = []- shrinkInt 1 = [0]- shrinkInt _ = [0, 1]- shrinkPico 0 = []- shrinkPico 1 = [0]- shrinkPico p = case reduceDigits 12 p of- Just p' -> [0, 1, p']- Nothing -> [0, 1]- in- [TimeOfDay h' m s | h' <- shrinkInt h]- ++ [TimeOfDay h m' s | m' <- shrinkInt m]- ++ [TimeOfDay h m s' | s' <- shrinkPico s]+ arbitrary = liftM timeToTimeOfDay arbitrary+ shrink (TimeOfDay h m s) =+ let shrinkInt 0 = []+ shrinkInt 1 = [0]+ shrinkInt _ = [0, 1]+ shrinkPico 0 = []+ shrinkPico 1 = [0]+ shrinkPico p = case reduceDigits 12 p of+ Just p' -> [0, 1, p']+ Nothing -> [0, 1]+ in [TimeOfDay h' m s | h' <- shrinkInt h]+ ++ [TimeOfDay h m' s | m' <- shrinkInt m]+ ++ [TimeOfDay h m s' | s' <- shrinkPico s] instance CoArbitrary TimeOfDay where- coarbitrary t = coarbitrary (timeOfDayToTime t)+ coarbitrary t = coarbitrary (timeOfDayToTime t) instance Arbitrary LocalTime where- arbitrary = liftM2 LocalTime arbitrary arbitrary- shrink (LocalTime d tod) = [LocalTime d' tod | d' <- shrink d] ++ [LocalTime d tod' | tod' <- shrink tod]+ arbitrary = liftM2 LocalTime arbitrary arbitrary+ shrink (LocalTime d tod) = [LocalTime d' tod | d' <- shrink d] ++ [LocalTime d tod' | tod' <- shrink tod] instance CoArbitrary LocalTime where- coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer)+ coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer) instance Arbitrary TimeZone where- arbitrary = liftM minutesToTimeZone $ choose (-720, 720)- shrink (TimeZone 0 _ _) = []- shrink (TimeZone _ s n) = [TimeZone 0 s n]+ arbitrary = liftM minutesToTimeZone $ choose (-720, 720)+ shrink (TimeZone 0 _ _) = []+ shrink (TimeZone _ s n) = [TimeZone 0 s n] instance CoArbitrary TimeZone where- coarbitrary tz = coarbitrary (timeZoneMinutes tz)+ coarbitrary tz = coarbitrary (timeZoneMinutes tz) instance Arbitrary ZonedTime where- arbitrary = liftM2 ZonedTime arbitrary arbitrary- shrink (ZonedTime d tz) = [ZonedTime d' tz | d' <- shrink d] ++ [ZonedTime d tz' | tz' <- shrink tz]+ arbitrary = liftM2 ZonedTime arbitrary arbitrary+ shrink (ZonedTime d tz) = [ZonedTime d' tz | d' <- shrink d] ++ [ZonedTime d tz' | tz' <- shrink tz] instance CoArbitrary ZonedTime where- coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer)+ coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer) instance Arbitrary UTCTime where- arbitrary = liftM2 UTCTime arbitrary arbitrary- shrink t = fmap (localTimeToUTC utc) $ shrink $ utcToLocalTime utc t+ arbitrary = liftM2 UTCTime arbitrary arbitrary+ shrink t = fmap (localTimeToUTC utc) $ shrink $ utcToLocalTime utc t instance CoArbitrary UTCTime where- coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds t) :: Integer)+ coarbitrary t = coarbitrary (floor (utcTimeToPOSIXSeconds t) :: Integer) instance Arbitrary UniversalTime where- arbitrary = liftM (\n -> ModJulianDate $ n % k) $ choose (-313698 * k, 2973483 * k) -- 1000-01-1 to 9999-12-31- where- k = 86400- shrink t = fmap (localTimeToUT1 0) $ shrink $ ut1ToLocalTime 0 t+ arbitrary = liftM (\n -> ModJulianDate $ n % k) $ choose (-313698 * k, 2973483 * k) -- 1000-01-1 to 9999-12-31+ where+ k = 86400+ shrink t = fmap (localTimeToUT1 0) $ shrink $ ut1ToLocalTime 0 t instance CoArbitrary UniversalTime where- coarbitrary (ModJulianDate d) = coarbitrary d+ coarbitrary (ModJulianDate d) = coarbitrary d
test/main/Test/Calendar/AddDays.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.AddDays (- addDaysTest,-) where+module Test.Calendar.AddDays+ ( addDaysTest,+ )+where import Data.Time.Calendar.Compat import Test.Calendar.AddDaysRef@@ -9,41 +10,41 @@ 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- ]+ [ 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)- ]+ [ ("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)- )+ (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
test/main/Test/Calendar/AddDaysRef.hs view
@@ -2,250 +2,250 @@ addDaysRef :: String addDaysRef =- unlines- [ "2005-02-28 + -10 * day = 2005-02-18"- , "2004-02-29 + -10 * day = 2004-02-19"- , "2004-01-31 + -10 * day = 2004-01-21"- , "2004-12-31 + -10 * day = 2004-12-21"- , "2005-07-01 + -10 * day = 2005-06-21"- , "2005-04-21 + -10 * day = 2005-04-11"- , "2005-06-30 + -10 * day = 2005-06-20"- , "2005-02-28 + -4 * day = 2005-02-24"- , "2004-02-29 + -4 * day = 2004-02-25"- , "2004-01-31 + -4 * day = 2004-01-27"- , "2004-12-31 + -4 * day = 2004-12-27"- , "2005-07-01 + -4 * day = 2005-06-27"- , "2005-04-21 + -4 * day = 2005-04-17"- , "2005-06-30 + -4 * day = 2005-06-26"- , "2005-02-28 + -1 * day = 2005-02-27"- , "2004-02-29 + -1 * day = 2004-02-28"- , "2004-01-31 + -1 * day = 2004-01-30"- , "2004-12-31 + -1 * day = 2004-12-30"- , "2005-07-01 + -1 * day = 2005-06-30"- , "2005-04-21 + -1 * day = 2005-04-20"- , "2005-06-30 + -1 * day = 2005-06-29"- , "2005-02-28 + 0 * day = 2005-02-28"- , "2004-02-29 + 0 * day = 2004-02-29"- , "2004-01-31 + 0 * day = 2004-01-31"- , "2004-12-31 + 0 * day = 2004-12-31"- , "2005-07-01 + 0 * day = 2005-07-01"- , "2005-04-21 + 0 * day = 2005-04-21"- , "2005-06-30 + 0 * day = 2005-06-30"- , "2005-02-28 + 1 * day = 2005-03-01"- , "2004-02-29 + 1 * day = 2004-03-01"- , "2004-01-31 + 1 * day = 2004-02-01"- , "2004-12-31 + 1 * day = 2005-01-01"- , "2005-07-01 + 1 * day = 2005-07-02"- , "2005-04-21 + 1 * day = 2005-04-22"- , "2005-06-30 + 1 * day = 2005-07-01"- , "2005-02-28 + 7 * day = 2005-03-07"- , "2004-02-29 + 7 * day = 2004-03-07"- , "2004-01-31 + 7 * day = 2004-02-07"- , "2004-12-31 + 7 * day = 2005-01-07"- , "2005-07-01 + 7 * day = 2005-07-08"- , "2005-04-21 + 7 * day = 2005-04-28"- , "2005-06-30 + 7 * day = 2005-07-07"- , "2005-02-28 + 83 * day = 2005-05-22"- , "2004-02-29 + 83 * day = 2004-05-22"- , "2004-01-31 + 83 * day = 2004-04-23"- , "2004-12-31 + 83 * day = 2005-03-24"- , "2005-07-01 + 83 * day = 2005-09-22"- , "2005-04-21 + 83 * day = 2005-07-13"- , "2005-06-30 + 83 * day = 2005-09-21"- , "2005-02-28 + -10 * month (clip) = 2004-04-28"- , "2004-02-29 + -10 * month (clip) = 2003-04-29"- , "2004-01-31 + -10 * month (clip) = 2003-03-31"- , "2004-12-31 + -10 * month (clip) = 2004-02-29"- , "2005-07-01 + -10 * month (clip) = 2004-09-01"- , "2005-04-21 + -10 * month (clip) = 2004-06-21"- , "2005-06-30 + -10 * month (clip) = 2004-08-30"- , "2005-02-28 + -4 * month (clip) = 2004-10-28"- , "2004-02-29 + -4 * month (clip) = 2003-10-29"- , "2004-01-31 + -4 * month (clip) = 2003-09-30"- , "2004-12-31 + -4 * month (clip) = 2004-08-31"- , "2005-07-01 + -4 * month (clip) = 2005-03-01"- , "2005-04-21 + -4 * month (clip) = 2004-12-21"- , "2005-06-30 + -4 * month (clip) = 2005-02-28"- , "2005-02-28 + -1 * month (clip) = 2005-01-28"- , "2004-02-29 + -1 * month (clip) = 2004-01-29"- , "2004-01-31 + -1 * month (clip) = 2003-12-31"- , "2004-12-31 + -1 * month (clip) = 2004-11-30"- , "2005-07-01 + -1 * month (clip) = 2005-06-01"- , "2005-04-21 + -1 * month (clip) = 2005-03-21"- , "2005-06-30 + -1 * month (clip) = 2005-05-30"- , "2005-02-28 + 0 * month (clip) = 2005-02-28"- , "2004-02-29 + 0 * month (clip) = 2004-02-29"- , "2004-01-31 + 0 * month (clip) = 2004-01-31"- , "2004-12-31 + 0 * month (clip) = 2004-12-31"- , "2005-07-01 + 0 * month (clip) = 2005-07-01"- , "2005-04-21 + 0 * month (clip) = 2005-04-21"- , "2005-06-30 + 0 * month (clip) = 2005-06-30"- , "2005-02-28 + 1 * month (clip) = 2005-03-28"- , "2004-02-29 + 1 * month (clip) = 2004-03-29"- , "2004-01-31 + 1 * month (clip) = 2004-02-29"- , "2004-12-31 + 1 * month (clip) = 2005-01-31"- , "2005-07-01 + 1 * month (clip) = 2005-08-01"- , "2005-04-21 + 1 * month (clip) = 2005-05-21"- , "2005-06-30 + 1 * month (clip) = 2005-07-30"- , "2005-02-28 + 7 * month (clip) = 2005-09-28"- , "2004-02-29 + 7 * month (clip) = 2004-09-29"- , "2004-01-31 + 7 * month (clip) = 2004-08-31"- , "2004-12-31 + 7 * month (clip) = 2005-07-31"- , "2005-07-01 + 7 * month (clip) = 2006-02-01"- , "2005-04-21 + 7 * month (clip) = 2005-11-21"- , "2005-06-30 + 7 * month (clip) = 2006-01-30"- , "2005-02-28 + 83 * month (clip) = 2012-01-28"- , "2004-02-29 + 83 * month (clip) = 2011-01-29"- , "2004-01-31 + 83 * month (clip) = 2010-12-31"- , "2004-12-31 + 83 * month (clip) = 2011-11-30"- , "2005-07-01 + 83 * month (clip) = 2012-06-01"- , "2005-04-21 + 83 * month (clip) = 2012-03-21"- , "2005-06-30 + 83 * month (clip) = 2012-05-30"- , "2005-02-28 + -10 * month (roll over) = 2004-04-28"- , "2004-02-29 + -10 * month (roll over) = 2003-04-29"- , "2004-01-31 + -10 * month (roll over) = 2003-03-31"- , "2004-12-31 + -10 * month (roll over) = 2004-03-02"- , "2005-07-01 + -10 * month (roll over) = 2004-09-01"- , "2005-04-21 + -10 * month (roll over) = 2004-06-21"- , "2005-06-30 + -10 * month (roll over) = 2004-08-30"- , "2005-02-28 + -4 * month (roll over) = 2004-10-28"- , "2004-02-29 + -4 * month (roll over) = 2003-10-29"- , "2004-01-31 + -4 * month (roll over) = 2003-10-01"- , "2004-12-31 + -4 * month (roll over) = 2004-08-31"- , "2005-07-01 + -4 * month (roll over) = 2005-03-01"- , "2005-04-21 + -4 * month (roll over) = 2004-12-21"- , "2005-06-30 + -4 * month (roll over) = 2005-03-02"- , "2005-02-28 + -1 * month (roll over) = 2005-01-28"- , "2004-02-29 + -1 * month (roll over) = 2004-01-29"- , "2004-01-31 + -1 * month (roll over) = 2003-12-31"- , "2004-12-31 + -1 * month (roll over) = 2004-12-01"- , "2005-07-01 + -1 * month (roll over) = 2005-06-01"- , "2005-04-21 + -1 * month (roll over) = 2005-03-21"- , "2005-06-30 + -1 * month (roll over) = 2005-05-30"- , "2005-02-28 + 0 * month (roll over) = 2005-02-28"- , "2004-02-29 + 0 * month (roll over) = 2004-02-29"- , "2004-01-31 + 0 * month (roll over) = 2004-01-31"- , "2004-12-31 + 0 * month (roll over) = 2004-12-31"- , "2005-07-01 + 0 * month (roll over) = 2005-07-01"- , "2005-04-21 + 0 * month (roll over) = 2005-04-21"- , "2005-06-30 + 0 * month (roll over) = 2005-06-30"- , "2005-02-28 + 1 * month (roll over) = 2005-03-28"- , "2004-02-29 + 1 * month (roll over) = 2004-03-29"- , "2004-01-31 + 1 * month (roll over) = 2004-03-02"- , "2004-12-31 + 1 * month (roll over) = 2005-01-31"- , "2005-07-01 + 1 * month (roll over) = 2005-08-01"- , "2005-04-21 + 1 * month (roll over) = 2005-05-21"- , "2005-06-30 + 1 * month (roll over) = 2005-07-30"- , "2005-02-28 + 7 * month (roll over) = 2005-09-28"- , "2004-02-29 + 7 * month (roll over) = 2004-09-29"- , "2004-01-31 + 7 * month (roll over) = 2004-08-31"- , "2004-12-31 + 7 * month (roll over) = 2005-07-31"- , "2005-07-01 + 7 * month (roll over) = 2006-02-01"- , "2005-04-21 + 7 * month (roll over) = 2005-11-21"- , "2005-06-30 + 7 * month (roll over) = 2006-01-30"- , "2005-02-28 + 83 * month (roll over) = 2012-01-28"- , "2004-02-29 + 83 * month (roll over) = 2011-01-29"- , "2004-01-31 + 83 * month (roll over) = 2010-12-31"- , "2004-12-31 + 83 * month (roll over) = 2011-12-01"- , "2005-07-01 + 83 * month (roll over) = 2012-06-01"- , "2005-04-21 + 83 * month (roll over) = 2012-03-21"- , "2005-06-30 + 83 * month (roll over) = 2012-05-30"- , "2005-02-28 + -10 * year (clip) = 1995-02-28"- , "2004-02-29 + -10 * year (clip) = 1994-02-28"- , "2004-01-31 + -10 * year (clip) = 1994-01-31"- , "2004-12-31 + -10 * year (clip) = 1994-12-31"- , "2005-07-01 + -10 * year (clip) = 1995-07-01"- , "2005-04-21 + -10 * year (clip) = 1995-04-21"- , "2005-06-30 + -10 * year (clip) = 1995-06-30"- , "2005-02-28 + -4 * year (clip) = 2001-02-28"- , "2004-02-29 + -4 * year (clip) = 2000-02-29"- , "2004-01-31 + -4 * year (clip) = 2000-01-31"- , "2004-12-31 + -4 * year (clip) = 2000-12-31"- , "2005-07-01 + -4 * year (clip) = 2001-07-01"- , "2005-04-21 + -4 * year (clip) = 2001-04-21"- , "2005-06-30 + -4 * year (clip) = 2001-06-30"- , "2005-02-28 + -1 * year (clip) = 2004-02-28"- , "2004-02-29 + -1 * year (clip) = 2003-02-28"- , "2004-01-31 + -1 * year (clip) = 2003-01-31"- , "2004-12-31 + -1 * year (clip) = 2003-12-31"- , "2005-07-01 + -1 * year (clip) = 2004-07-01"- , "2005-04-21 + -1 * year (clip) = 2004-04-21"- , "2005-06-30 + -1 * year (clip) = 2004-06-30"- , "2005-02-28 + 0 * year (clip) = 2005-02-28"- , "2004-02-29 + 0 * year (clip) = 2004-02-29"- , "2004-01-31 + 0 * year (clip) = 2004-01-31"- , "2004-12-31 + 0 * year (clip) = 2004-12-31"- , "2005-07-01 + 0 * year (clip) = 2005-07-01"- , "2005-04-21 + 0 * year (clip) = 2005-04-21"- , "2005-06-30 + 0 * year (clip) = 2005-06-30"- , "2005-02-28 + 1 * year (clip) = 2006-02-28"- , "2004-02-29 + 1 * year (clip) = 2005-02-28"- , "2004-01-31 + 1 * year (clip) = 2005-01-31"- , "2004-12-31 + 1 * year (clip) = 2005-12-31"- , "2005-07-01 + 1 * year (clip) = 2006-07-01"- , "2005-04-21 + 1 * year (clip) = 2006-04-21"- , "2005-06-30 + 1 * year (clip) = 2006-06-30"- , "2005-02-28 + 7 * year (clip) = 2012-02-28"- , "2004-02-29 + 7 * year (clip) = 2011-02-28"- , "2004-01-31 + 7 * year (clip) = 2011-01-31"- , "2004-12-31 + 7 * year (clip) = 2011-12-31"- , "2005-07-01 + 7 * year (clip) = 2012-07-01"- , "2005-04-21 + 7 * year (clip) = 2012-04-21"- , "2005-06-30 + 7 * year (clip) = 2012-06-30"- , "2005-02-28 + 83 * year (clip) = 2088-02-28"- , "2004-02-29 + 83 * year (clip) = 2087-02-28"- , "2004-01-31 + 83 * year (clip) = 2087-01-31"- , "2004-12-31 + 83 * year (clip) = 2087-12-31"- , "2005-07-01 + 83 * year (clip) = 2088-07-01"- , "2005-04-21 + 83 * year (clip) = 2088-04-21"- , "2005-06-30 + 83 * year (clip) = 2088-06-30"- , "2005-02-28 + -10 * year (roll over) = 1995-02-28"- , "2004-02-29 + -10 * year (roll over) = 1994-03-01"- , "2004-01-31 + -10 * year (roll over) = 1994-01-31"- , "2004-12-31 + -10 * year (roll over) = 1994-12-31"- , "2005-07-01 + -10 * year (roll over) = 1995-07-01"- , "2005-04-21 + -10 * year (roll over) = 1995-04-21"- , "2005-06-30 + -10 * year (roll over) = 1995-06-30"- , "2005-02-28 + -4 * year (roll over) = 2001-02-28"- , "2004-02-29 + -4 * year (roll over) = 2000-02-29"- , "2004-01-31 + -4 * year (roll over) = 2000-01-31"- , "2004-12-31 + -4 * year (roll over) = 2000-12-31"- , "2005-07-01 + -4 * year (roll over) = 2001-07-01"- , "2005-04-21 + -4 * year (roll over) = 2001-04-21"- , "2005-06-30 + -4 * year (roll over) = 2001-06-30"- , "2005-02-28 + -1 * year (roll over) = 2004-02-28"- , "2004-02-29 + -1 * year (roll over) = 2003-03-01"- , "2004-01-31 + -1 * year (roll over) = 2003-01-31"- , "2004-12-31 + -1 * year (roll over) = 2003-12-31"- , "2005-07-01 + -1 * year (roll over) = 2004-07-01"- , "2005-04-21 + -1 * year (roll over) = 2004-04-21"- , "2005-06-30 + -1 * year (roll over) = 2004-06-30"- , "2005-02-28 + 0 * year (roll over) = 2005-02-28"- , "2004-02-29 + 0 * year (roll over) = 2004-02-29"- , "2004-01-31 + 0 * year (roll over) = 2004-01-31"- , "2004-12-31 + 0 * year (roll over) = 2004-12-31"- , "2005-07-01 + 0 * year (roll over) = 2005-07-01"- , "2005-04-21 + 0 * year (roll over) = 2005-04-21"- , "2005-06-30 + 0 * year (roll over) = 2005-06-30"- , "2005-02-28 + 1 * year (roll over) = 2006-02-28"- , "2004-02-29 + 1 * year (roll over) = 2005-03-01"- , "2004-01-31 + 1 * year (roll over) = 2005-01-31"- , "2004-12-31 + 1 * year (roll over) = 2005-12-31"- , "2005-07-01 + 1 * year (roll over) = 2006-07-01"- , "2005-04-21 + 1 * year (roll over) = 2006-04-21"- , "2005-06-30 + 1 * year (roll over) = 2006-06-30"- , "2005-02-28 + 7 * year (roll over) = 2012-02-28"- , "2004-02-29 + 7 * year (roll over) = 2011-03-01"- , "2004-01-31 + 7 * year (roll over) = 2011-01-31"- , "2004-12-31 + 7 * year (roll over) = 2011-12-31"- , "2005-07-01 + 7 * year (roll over) = 2012-07-01"- , "2005-04-21 + 7 * year (roll over) = 2012-04-21"- , "2005-06-30 + 7 * year (roll over) = 2012-06-30"- , "2005-02-28 + 83 * year (roll over) = 2088-02-28"- , "2004-02-29 + 83 * year (roll over) = 2087-03-01"- , "2004-01-31 + 83 * year (roll over) = 2087-01-31"- , "2004-12-31 + 83 * year (roll over) = 2087-12-31"- , "2005-07-01 + 83 * year (roll over) = 2088-07-01"- , "2005-04-21 + 83 * year (roll over) = 2088-04-21"- , "2005-06-30 + 83 * year (roll over) = 2088-06-30"- ]+ unlines+ [ "2005-02-28 + -10 * day = 2005-02-18",+ "2004-02-29 + -10 * day = 2004-02-19",+ "2004-01-31 + -10 * day = 2004-01-21",+ "2004-12-31 + -10 * day = 2004-12-21",+ "2005-07-01 + -10 * day = 2005-06-21",+ "2005-04-21 + -10 * day = 2005-04-11",+ "2005-06-30 + -10 * day = 2005-06-20",+ "2005-02-28 + -4 * day = 2005-02-24",+ "2004-02-29 + -4 * day = 2004-02-25",+ "2004-01-31 + -4 * day = 2004-01-27",+ "2004-12-31 + -4 * day = 2004-12-27",+ "2005-07-01 + -4 * day = 2005-06-27",+ "2005-04-21 + -4 * day = 2005-04-17",+ "2005-06-30 + -4 * day = 2005-06-26",+ "2005-02-28 + -1 * day = 2005-02-27",+ "2004-02-29 + -1 * day = 2004-02-28",+ "2004-01-31 + -1 * day = 2004-01-30",+ "2004-12-31 + -1 * day = 2004-12-30",+ "2005-07-01 + -1 * day = 2005-06-30",+ "2005-04-21 + -1 * day = 2005-04-20",+ "2005-06-30 + -1 * day = 2005-06-29",+ "2005-02-28 + 0 * day = 2005-02-28",+ "2004-02-29 + 0 * day = 2004-02-29",+ "2004-01-31 + 0 * day = 2004-01-31",+ "2004-12-31 + 0 * day = 2004-12-31",+ "2005-07-01 + 0 * day = 2005-07-01",+ "2005-04-21 + 0 * day = 2005-04-21",+ "2005-06-30 + 0 * day = 2005-06-30",+ "2005-02-28 + 1 * day = 2005-03-01",+ "2004-02-29 + 1 * day = 2004-03-01",+ "2004-01-31 + 1 * day = 2004-02-01",+ "2004-12-31 + 1 * day = 2005-01-01",+ "2005-07-01 + 1 * day = 2005-07-02",+ "2005-04-21 + 1 * day = 2005-04-22",+ "2005-06-30 + 1 * day = 2005-07-01",+ "2005-02-28 + 7 * day = 2005-03-07",+ "2004-02-29 + 7 * day = 2004-03-07",+ "2004-01-31 + 7 * day = 2004-02-07",+ "2004-12-31 + 7 * day = 2005-01-07",+ "2005-07-01 + 7 * day = 2005-07-08",+ "2005-04-21 + 7 * day = 2005-04-28",+ "2005-06-30 + 7 * day = 2005-07-07",+ "2005-02-28 + 83 * day = 2005-05-22",+ "2004-02-29 + 83 * day = 2004-05-22",+ "2004-01-31 + 83 * day = 2004-04-23",+ "2004-12-31 + 83 * day = 2005-03-24",+ "2005-07-01 + 83 * day = 2005-09-22",+ "2005-04-21 + 83 * day = 2005-07-13",+ "2005-06-30 + 83 * day = 2005-09-21",+ "2005-02-28 + -10 * month (clip) = 2004-04-28",+ "2004-02-29 + -10 * month (clip) = 2003-04-29",+ "2004-01-31 + -10 * month (clip) = 2003-03-31",+ "2004-12-31 + -10 * month (clip) = 2004-02-29",+ "2005-07-01 + -10 * month (clip) = 2004-09-01",+ "2005-04-21 + -10 * month (clip) = 2004-06-21",+ "2005-06-30 + -10 * month (clip) = 2004-08-30",+ "2005-02-28 + -4 * month (clip) = 2004-10-28",+ "2004-02-29 + -4 * month (clip) = 2003-10-29",+ "2004-01-31 + -4 * month (clip) = 2003-09-30",+ "2004-12-31 + -4 * month (clip) = 2004-08-31",+ "2005-07-01 + -4 * month (clip) = 2005-03-01",+ "2005-04-21 + -4 * month (clip) = 2004-12-21",+ "2005-06-30 + -4 * month (clip) = 2005-02-28",+ "2005-02-28 + -1 * month (clip) = 2005-01-28",+ "2004-02-29 + -1 * month (clip) = 2004-01-29",+ "2004-01-31 + -1 * month (clip) = 2003-12-31",+ "2004-12-31 + -1 * month (clip) = 2004-11-30",+ "2005-07-01 + -1 * month (clip) = 2005-06-01",+ "2005-04-21 + -1 * month (clip) = 2005-03-21",+ "2005-06-30 + -1 * month (clip) = 2005-05-30",+ "2005-02-28 + 0 * month (clip) = 2005-02-28",+ "2004-02-29 + 0 * month (clip) = 2004-02-29",+ "2004-01-31 + 0 * month (clip) = 2004-01-31",+ "2004-12-31 + 0 * month (clip) = 2004-12-31",+ "2005-07-01 + 0 * month (clip) = 2005-07-01",+ "2005-04-21 + 0 * month (clip) = 2005-04-21",+ "2005-06-30 + 0 * month (clip) = 2005-06-30",+ "2005-02-28 + 1 * month (clip) = 2005-03-28",+ "2004-02-29 + 1 * month (clip) = 2004-03-29",+ "2004-01-31 + 1 * month (clip) = 2004-02-29",+ "2004-12-31 + 1 * month (clip) = 2005-01-31",+ "2005-07-01 + 1 * month (clip) = 2005-08-01",+ "2005-04-21 + 1 * month (clip) = 2005-05-21",+ "2005-06-30 + 1 * month (clip) = 2005-07-30",+ "2005-02-28 + 7 * month (clip) = 2005-09-28",+ "2004-02-29 + 7 * month (clip) = 2004-09-29",+ "2004-01-31 + 7 * month (clip) = 2004-08-31",+ "2004-12-31 + 7 * month (clip) = 2005-07-31",+ "2005-07-01 + 7 * month (clip) = 2006-02-01",+ "2005-04-21 + 7 * month (clip) = 2005-11-21",+ "2005-06-30 + 7 * month (clip) = 2006-01-30",+ "2005-02-28 + 83 * month (clip) = 2012-01-28",+ "2004-02-29 + 83 * month (clip) = 2011-01-29",+ "2004-01-31 + 83 * month (clip) = 2010-12-31",+ "2004-12-31 + 83 * month (clip) = 2011-11-30",+ "2005-07-01 + 83 * month (clip) = 2012-06-01",+ "2005-04-21 + 83 * month (clip) = 2012-03-21",+ "2005-06-30 + 83 * month (clip) = 2012-05-30",+ "2005-02-28 + -10 * month (roll over) = 2004-04-28",+ "2004-02-29 + -10 * month (roll over) = 2003-04-29",+ "2004-01-31 + -10 * month (roll over) = 2003-03-31",+ "2004-12-31 + -10 * month (roll over) = 2004-03-02",+ "2005-07-01 + -10 * month (roll over) = 2004-09-01",+ "2005-04-21 + -10 * month (roll over) = 2004-06-21",+ "2005-06-30 + -10 * month (roll over) = 2004-08-30",+ "2005-02-28 + -4 * month (roll over) = 2004-10-28",+ "2004-02-29 + -4 * month (roll over) = 2003-10-29",+ "2004-01-31 + -4 * month (roll over) = 2003-10-01",+ "2004-12-31 + -4 * month (roll over) = 2004-08-31",+ "2005-07-01 + -4 * month (roll over) = 2005-03-01",+ "2005-04-21 + -4 * month (roll over) = 2004-12-21",+ "2005-06-30 + -4 * month (roll over) = 2005-03-02",+ "2005-02-28 + -1 * month (roll over) = 2005-01-28",+ "2004-02-29 + -1 * month (roll over) = 2004-01-29",+ "2004-01-31 + -1 * month (roll over) = 2003-12-31",+ "2004-12-31 + -1 * month (roll over) = 2004-12-01",+ "2005-07-01 + -1 * month (roll over) = 2005-06-01",+ "2005-04-21 + -1 * month (roll over) = 2005-03-21",+ "2005-06-30 + -1 * month (roll over) = 2005-05-30",+ "2005-02-28 + 0 * month (roll over) = 2005-02-28",+ "2004-02-29 + 0 * month (roll over) = 2004-02-29",+ "2004-01-31 + 0 * month (roll over) = 2004-01-31",+ "2004-12-31 + 0 * month (roll over) = 2004-12-31",+ "2005-07-01 + 0 * month (roll over) = 2005-07-01",+ "2005-04-21 + 0 * month (roll over) = 2005-04-21",+ "2005-06-30 + 0 * month (roll over) = 2005-06-30",+ "2005-02-28 + 1 * month (roll over) = 2005-03-28",+ "2004-02-29 + 1 * month (roll over) = 2004-03-29",+ "2004-01-31 + 1 * month (roll over) = 2004-03-02",+ "2004-12-31 + 1 * month (roll over) = 2005-01-31",+ "2005-07-01 + 1 * month (roll over) = 2005-08-01",+ "2005-04-21 + 1 * month (roll over) = 2005-05-21",+ "2005-06-30 + 1 * month (roll over) = 2005-07-30",+ "2005-02-28 + 7 * month (roll over) = 2005-09-28",+ "2004-02-29 + 7 * month (roll over) = 2004-09-29",+ "2004-01-31 + 7 * month (roll over) = 2004-08-31",+ "2004-12-31 + 7 * month (roll over) = 2005-07-31",+ "2005-07-01 + 7 * month (roll over) = 2006-02-01",+ "2005-04-21 + 7 * month (roll over) = 2005-11-21",+ "2005-06-30 + 7 * month (roll over) = 2006-01-30",+ "2005-02-28 + 83 * month (roll over) = 2012-01-28",+ "2004-02-29 + 83 * month (roll over) = 2011-01-29",+ "2004-01-31 + 83 * month (roll over) = 2010-12-31",+ "2004-12-31 + 83 * month (roll over) = 2011-12-01",+ "2005-07-01 + 83 * month (roll over) = 2012-06-01",+ "2005-04-21 + 83 * month (roll over) = 2012-03-21",+ "2005-06-30 + 83 * month (roll over) = 2012-05-30",+ "2005-02-28 + -10 * year (clip) = 1995-02-28",+ "2004-02-29 + -10 * year (clip) = 1994-02-28",+ "2004-01-31 + -10 * year (clip) = 1994-01-31",+ "2004-12-31 + -10 * year (clip) = 1994-12-31",+ "2005-07-01 + -10 * year (clip) = 1995-07-01",+ "2005-04-21 + -10 * year (clip) = 1995-04-21",+ "2005-06-30 + -10 * year (clip) = 1995-06-30",+ "2005-02-28 + -4 * year (clip) = 2001-02-28",+ "2004-02-29 + -4 * year (clip) = 2000-02-29",+ "2004-01-31 + -4 * year (clip) = 2000-01-31",+ "2004-12-31 + -4 * year (clip) = 2000-12-31",+ "2005-07-01 + -4 * year (clip) = 2001-07-01",+ "2005-04-21 + -4 * year (clip) = 2001-04-21",+ "2005-06-30 + -4 * year (clip) = 2001-06-30",+ "2005-02-28 + -1 * year (clip) = 2004-02-28",+ "2004-02-29 + -1 * year (clip) = 2003-02-28",+ "2004-01-31 + -1 * year (clip) = 2003-01-31",+ "2004-12-31 + -1 * year (clip) = 2003-12-31",+ "2005-07-01 + -1 * year (clip) = 2004-07-01",+ "2005-04-21 + -1 * year (clip) = 2004-04-21",+ "2005-06-30 + -1 * year (clip) = 2004-06-30",+ "2005-02-28 + 0 * year (clip) = 2005-02-28",+ "2004-02-29 + 0 * year (clip) = 2004-02-29",+ "2004-01-31 + 0 * year (clip) = 2004-01-31",+ "2004-12-31 + 0 * year (clip) = 2004-12-31",+ "2005-07-01 + 0 * year (clip) = 2005-07-01",+ "2005-04-21 + 0 * year (clip) = 2005-04-21",+ "2005-06-30 + 0 * year (clip) = 2005-06-30",+ "2005-02-28 + 1 * year (clip) = 2006-02-28",+ "2004-02-29 + 1 * year (clip) = 2005-02-28",+ "2004-01-31 + 1 * year (clip) = 2005-01-31",+ "2004-12-31 + 1 * year (clip) = 2005-12-31",+ "2005-07-01 + 1 * year (clip) = 2006-07-01",+ "2005-04-21 + 1 * year (clip) = 2006-04-21",+ "2005-06-30 + 1 * year (clip) = 2006-06-30",+ "2005-02-28 + 7 * year (clip) = 2012-02-28",+ "2004-02-29 + 7 * year (clip) = 2011-02-28",+ "2004-01-31 + 7 * year (clip) = 2011-01-31",+ "2004-12-31 + 7 * year (clip) = 2011-12-31",+ "2005-07-01 + 7 * year (clip) = 2012-07-01",+ "2005-04-21 + 7 * year (clip) = 2012-04-21",+ "2005-06-30 + 7 * year (clip) = 2012-06-30",+ "2005-02-28 + 83 * year (clip) = 2088-02-28",+ "2004-02-29 + 83 * year (clip) = 2087-02-28",+ "2004-01-31 + 83 * year (clip) = 2087-01-31",+ "2004-12-31 + 83 * year (clip) = 2087-12-31",+ "2005-07-01 + 83 * year (clip) = 2088-07-01",+ "2005-04-21 + 83 * year (clip) = 2088-04-21",+ "2005-06-30 + 83 * year (clip) = 2088-06-30",+ "2005-02-28 + -10 * year (roll over) = 1995-02-28",+ "2004-02-29 + -10 * year (roll over) = 1994-03-01",+ "2004-01-31 + -10 * year (roll over) = 1994-01-31",+ "2004-12-31 + -10 * year (roll over) = 1994-12-31",+ "2005-07-01 + -10 * year (roll over) = 1995-07-01",+ "2005-04-21 + -10 * year (roll over) = 1995-04-21",+ "2005-06-30 + -10 * year (roll over) = 1995-06-30",+ "2005-02-28 + -4 * year (roll over) = 2001-02-28",+ "2004-02-29 + -4 * year (roll over) = 2000-02-29",+ "2004-01-31 + -4 * year (roll over) = 2000-01-31",+ "2004-12-31 + -4 * year (roll over) = 2000-12-31",+ "2005-07-01 + -4 * year (roll over) = 2001-07-01",+ "2005-04-21 + -4 * year (roll over) = 2001-04-21",+ "2005-06-30 + -4 * year (roll over) = 2001-06-30",+ "2005-02-28 + -1 * year (roll over) = 2004-02-28",+ "2004-02-29 + -1 * year (roll over) = 2003-03-01",+ "2004-01-31 + -1 * year (roll over) = 2003-01-31",+ "2004-12-31 + -1 * year (roll over) = 2003-12-31",+ "2005-07-01 + -1 * year (roll over) = 2004-07-01",+ "2005-04-21 + -1 * year (roll over) = 2004-04-21",+ "2005-06-30 + -1 * year (roll over) = 2004-06-30",+ "2005-02-28 + 0 * year (roll over) = 2005-02-28",+ "2004-02-29 + 0 * year (roll over) = 2004-02-29",+ "2004-01-31 + 0 * year (roll over) = 2004-01-31",+ "2004-12-31 + 0 * year (roll over) = 2004-12-31",+ "2005-07-01 + 0 * year (roll over) = 2005-07-01",+ "2005-04-21 + 0 * year (roll over) = 2005-04-21",+ "2005-06-30 + 0 * year (roll over) = 2005-06-30",+ "2005-02-28 + 1 * year (roll over) = 2006-02-28",+ "2004-02-29 + 1 * year (roll over) = 2005-03-01",+ "2004-01-31 + 1 * year (roll over) = 2005-01-31",+ "2004-12-31 + 1 * year (roll over) = 2005-12-31",+ "2005-07-01 + 1 * year (roll over) = 2006-07-01",+ "2005-04-21 + 1 * year (roll over) = 2006-04-21",+ "2005-06-30 + 1 * year (roll over) = 2006-06-30",+ "2005-02-28 + 7 * year (roll over) = 2012-02-28",+ "2004-02-29 + 7 * year (roll over) = 2011-03-01",+ "2004-01-31 + 7 * year (roll over) = 2011-01-31",+ "2004-12-31 + 7 * year (roll over) = 2011-12-31",+ "2005-07-01 + 7 * year (roll over) = 2012-07-01",+ "2005-04-21 + 7 * year (roll over) = 2012-04-21",+ "2005-06-30 + 7 * year (roll over) = 2012-06-30",+ "2005-02-28 + 83 * year (roll over) = 2088-02-28",+ "2004-02-29 + 83 * year (roll over) = 2087-03-01",+ "2004-01-31 + 83 * year (roll over) = 2087-01-31",+ "2004-12-31 + 83 * year (roll over) = 2087-12-31",+ "2005-07-01 + 83 * year (roll over) = 2088-07-01",+ "2005-04-21 + 83 * year (roll over) = 2088-04-21",+ "2005-06-30 + 83 * year (roll over) = 2088-06-30"+ ]
test/main/Test/Calendar/CalendarProps.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.CalendarProps (- testCalendarProps,-) where+module Test.Calendar.CalendarProps+ ( testCalendarProps,+ )+where import Data.Time.Calendar.Month.Compat import Data.Time.Calendar.Quarter.Compat@@ -10,15 +11,15 @@ testYearMonth :: TestTree testYearMonth = nameTest "YearMonth" $ \m -> case m of- YearMonth y my -> m == YearMonth y my+ YearMonth y my -> m == YearMonth y my testMonthDay :: TestTree testMonthDay = nameTest "MonthDay" $ \d -> case d of- MonthDay m dm -> d == MonthDay m dm+ MonthDay m dm -> d == MonthDay m dm testYearQuarter :: TestTree testYearQuarter = nameTest "YearQuarter" $ \q -> case q of- YearQuarter y qy -> q == YearQuarter y qy+ YearQuarter y qy -> q == YearQuarter y qy testCalendarProps :: TestTree-testCalendarProps = nameTest "calender-props" [testYearMonth, testMonthDay, testYearQuarter]+testCalendarProps = nameTest "calendar-props" [testYearMonth, testMonthDay, testYearQuarter]
test/main/Test/Calendar/Calendars.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.Calendars (- testCalendars,-) where+module Test.Calendar.Calendars+ ( testCalendars,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.Julian.Compat@@ -11,11 +12,11 @@ showers :: [(String, Day -> String)] showers =- [ ("MJD", show . toModifiedJulianDay)- , ("Gregorian", showGregorian)- , ("Julian", showJulian)- , ("ISO 8601", showWeekDate)- ]+ [ ("MJD", show . toModifiedJulianDay),+ ("Gregorian", showGregorian),+ ("Julian", showJulian),+ ("ISO 8601", showWeekDate)+ ] days :: [Day] days = [fromGregorian 0 12 31, fromJulian 1752 9 2, fromGregorian 1752 9 14, fromGregorian 2005 1 23]
test/main/Test/Calendar/CalendarsRef.hs view
@@ -2,9 +2,9 @@ testCalendarsRef :: String testCalendarsRef =- unlines- [ " == MJD -678576 == Gregorian 0000-12-31 == Julian 0001-01-02 == ISO 8601 0000-W52-7"- , " == MJD -38780 == Gregorian 1752-09-13 == Julian 1752-09-02 == ISO 8601 1752-W37-3"- , " == MJD -38779 == Gregorian 1752-09-14 == Julian 1752-09-03 == ISO 8601 1752-W37-4"- , " == MJD 53393 == Gregorian 2005-01-23 == Julian 2005-01-10 == ISO 8601 2005-W03-7"- ]+ unlines+ [ " == MJD -678576 == Gregorian 0000-12-31 == Julian 0001-01-02 == ISO 8601 0000-W52-7",+ " == MJD -38780 == Gregorian 1752-09-13 == Julian 1752-09-02 == ISO 8601 1752-W37-3",+ " == MJD -38779 == Gregorian 1752-09-14 == Julian 1752-09-03 == ISO 8601 1752-W37-4",+ " == MJD 53393 == Gregorian 2005-01-23 == Julian 2005-01-10 == ISO 8601 2005-W03-7"+ ]
test/main/Test/Calendar/ClipDates.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.ClipDates (- clipDates,-) where+module Test.Calendar.ClipDates+ ( clipDates,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.OrdinalDate.Compat@@ -24,10 +25,8 @@ tupleUp3 :: [a] -> [b] -> [c] -> [(a, b, c)] tupleUp3 l1 l2 l3 =- let- ts = tupleUp2 l2 l3- in- concatMap (\e -> map (\(f, g) -> (e, f, g)) ts) l1+ let ts = tupleUp2 l2 l3+ in concatMap (\e -> map (\(f, g) -> (e, f, g)) ts) l1 testPairs :: String -> [String] -> [String] -> TestTree testPairs name expected found = testGroup name $ fmap (\(e, f) -> testCase e $ assertEqual "" e f) $ zip expected found@@ -35,13 +34,13 @@ -- clipDates :: TestTree clipDates =- testGroup- "clipDates"- [ testPairs "YearAndDay" clipDatesYearAndDayRef $ map yearAndDay $ tupleUp2 [1968, 1969, 1971] [-4, 0, 1, 200, 364, 365, 366, 367, 700]- , testPairs "Gregorian" clipDatesGregorianDayRef $- map gregorian $- tupleUp3 [1968, 1969, 1971] [-20, -1, 0, 1, 2, 12, 13, 17] [-7, -1, 0, 1, 2, 27, 28, 29, 30, 31, 32, 40]- , testPairs "ISOWeekDay" clipDatesISOWeekDayRef $- map iSOWeekDay $- tupleUp3 [1968, 1969, 2004] [-20, -1, 0, 1, 20, 51, 52, 53, 54] [-2, -1, 0, 1, 4, 6, 7, 8, 9]- ]+ testGroup+ "clipDates"+ [ testPairs "YearAndDay" clipDatesYearAndDayRef $ map yearAndDay $ tupleUp2 [1968, 1969, 1971] [-4, 0, 1, 200, 364, 365, 366, 367, 700],+ testPairs "Gregorian" clipDatesGregorianDayRef $+ map gregorian $+ tupleUp3 [1968, 1969, 1971] [-20, -1, 0, 1, 2, 12, 13, 17] [-7, -1, 0, 1, 2, 27, 28, 29, 30, 31, 32, 40],+ testPairs "ISOWeekDay" clipDatesISOWeekDayRef $+ map iSOWeekDay $+ tupleUp3 [1968, 1969, 2004] [-20, -1, 0, 1, 20, 51, 52, 53, 54] [-2, -1, 0, 1, 4, 6, 7, 8, 9]+ ]
test/main/Test/Calendar/ClipDatesRef.hs view
@@ -2,570 +2,570 @@ clipDatesYearAndDayRef :: [String] clipDatesYearAndDayRef =- [ "1968--4 = 1968-001"- , "1968-0 = 1968-001"- , "1968-1 = 1968-001"- , "1968-200 = 1968-200"- , "1968-364 = 1968-364"- , "1968-365 = 1968-365"- , "1968-366 = 1968-366"- , "1968-367 = 1968-366"- , "1968-700 = 1968-366"- , "1969--4 = 1969-001"- , "1969-0 = 1969-001"- , "1969-1 = 1969-001"- , "1969-200 = 1969-200"- , "1969-364 = 1969-364"- , "1969-365 = 1969-365"- , "1969-366 = 1969-365"- , "1969-367 = 1969-365"- , "1969-700 = 1969-365"- , "1971--4 = 1971-001"- , "1971-0 = 1971-001"- , "1971-1 = 1971-001"- , "1971-200 = 1971-200"- , "1971-364 = 1971-364"- , "1971-365 = 1971-365"- , "1971-366 = 1971-365"- , "1971-367 = 1971-365"- , "1971-700 = 1971-365"- ]--clipDatesGregorianDayRef :: [String]-clipDatesGregorianDayRef =- [ "1968--20--7 = 1968-01-01"- , "1968--20--1 = 1968-01-01"- , "1968--20-0 = 1968-01-01"- , "1968--20-1 = 1968-01-01"- , "1968--20-2 = 1968-01-02"- , "1968--20-27 = 1968-01-27"- , "1968--20-28 = 1968-01-28"- , "1968--20-29 = 1968-01-29"- , "1968--20-30 = 1968-01-30"- , "1968--20-31 = 1968-01-31"- , "1968--20-32 = 1968-01-31"- , "1968--20-40 = 1968-01-31"- , "1968--1--7 = 1968-01-01"- , "1968--1--1 = 1968-01-01"- , "1968--1-0 = 1968-01-01"- , "1968--1-1 = 1968-01-01"- , "1968--1-2 = 1968-01-02"- , "1968--1-27 = 1968-01-27"- , "1968--1-28 = 1968-01-28"- , "1968--1-29 = 1968-01-29"- , "1968--1-30 = 1968-01-30"- , "1968--1-31 = 1968-01-31"- , "1968--1-32 = 1968-01-31"- , "1968--1-40 = 1968-01-31"- , "1968-0--7 = 1968-01-01"- , "1968-0--1 = 1968-01-01"- , "1968-0-0 = 1968-01-01"- , "1968-0-1 = 1968-01-01"- , "1968-0-2 = 1968-01-02"- , "1968-0-27 = 1968-01-27"- , "1968-0-28 = 1968-01-28"- , "1968-0-29 = 1968-01-29"- , "1968-0-30 = 1968-01-30"- , "1968-0-31 = 1968-01-31"- , "1968-0-32 = 1968-01-31"- , "1968-0-40 = 1968-01-31"- , "1968-1--7 = 1968-01-01"- , "1968-1--1 = 1968-01-01"- , "1968-1-0 = 1968-01-01"- , "1968-1-1 = 1968-01-01"- , "1968-1-2 = 1968-01-02"- , "1968-1-27 = 1968-01-27"- , "1968-1-28 = 1968-01-28"- , "1968-1-29 = 1968-01-29"- , "1968-1-30 = 1968-01-30"- , "1968-1-31 = 1968-01-31"- , "1968-1-32 = 1968-01-31"- , "1968-1-40 = 1968-01-31"- , "1968-2--7 = 1968-02-01"- , "1968-2--1 = 1968-02-01"- , "1968-2-0 = 1968-02-01"- , "1968-2-1 = 1968-02-01"- , "1968-2-2 = 1968-02-02"- , "1968-2-27 = 1968-02-27"- , "1968-2-28 = 1968-02-28"- , "1968-2-29 = 1968-02-29"- , "1968-2-30 = 1968-02-29"- , "1968-2-31 = 1968-02-29"- , "1968-2-32 = 1968-02-29"- , "1968-2-40 = 1968-02-29"- , "1968-12--7 = 1968-12-01"- , "1968-12--1 = 1968-12-01"- , "1968-12-0 = 1968-12-01"- , "1968-12-1 = 1968-12-01"- , "1968-12-2 = 1968-12-02"- , "1968-12-27 = 1968-12-27"- , "1968-12-28 = 1968-12-28"- , "1968-12-29 = 1968-12-29"- , "1968-12-30 = 1968-12-30"- , "1968-12-31 = 1968-12-31"- , "1968-12-32 = 1968-12-31"- , "1968-12-40 = 1968-12-31"- , "1968-13--7 = 1968-12-01"- , "1968-13--1 = 1968-12-01"- , "1968-13-0 = 1968-12-01"- , "1968-13-1 = 1968-12-01"- , "1968-13-2 = 1968-12-02"- , "1968-13-27 = 1968-12-27"- , "1968-13-28 = 1968-12-28"- , "1968-13-29 = 1968-12-29"- , "1968-13-30 = 1968-12-30"- , "1968-13-31 = 1968-12-31"- , "1968-13-32 = 1968-12-31"- , "1968-13-40 = 1968-12-31"- , "1968-17--7 = 1968-12-01"- , "1968-17--1 = 1968-12-01"- , "1968-17-0 = 1968-12-01"- , "1968-17-1 = 1968-12-01"- , "1968-17-2 = 1968-12-02"- , "1968-17-27 = 1968-12-27"- , "1968-17-28 = 1968-12-28"- , "1968-17-29 = 1968-12-29"- , "1968-17-30 = 1968-12-30"- , "1968-17-31 = 1968-12-31"- , "1968-17-32 = 1968-12-31"- , "1968-17-40 = 1968-12-31"- , "1969--20--7 = 1969-01-01"- , "1969--20--1 = 1969-01-01"- , "1969--20-0 = 1969-01-01"- , "1969--20-1 = 1969-01-01"- , "1969--20-2 = 1969-01-02"- , "1969--20-27 = 1969-01-27"- , "1969--20-28 = 1969-01-28"- , "1969--20-29 = 1969-01-29"- , "1969--20-30 = 1969-01-30"- , "1969--20-31 = 1969-01-31"- , "1969--20-32 = 1969-01-31"- , "1969--20-40 = 1969-01-31"- , "1969--1--7 = 1969-01-01"- , "1969--1--1 = 1969-01-01"- , "1969--1-0 = 1969-01-01"- , "1969--1-1 = 1969-01-01"- , "1969--1-2 = 1969-01-02"- , "1969--1-27 = 1969-01-27"- , "1969--1-28 = 1969-01-28"- , "1969--1-29 = 1969-01-29"- , "1969--1-30 = 1969-01-30"- , "1969--1-31 = 1969-01-31"- , "1969--1-32 = 1969-01-31"- , "1969--1-40 = 1969-01-31"- , "1969-0--7 = 1969-01-01"- , "1969-0--1 = 1969-01-01"- , "1969-0-0 = 1969-01-01"- , "1969-0-1 = 1969-01-01"- , "1969-0-2 = 1969-01-02"- , "1969-0-27 = 1969-01-27"- , "1969-0-28 = 1969-01-28"- , "1969-0-29 = 1969-01-29"- , "1969-0-30 = 1969-01-30"- , "1969-0-31 = 1969-01-31"- , "1969-0-32 = 1969-01-31"- , "1969-0-40 = 1969-01-31"- , "1969-1--7 = 1969-01-01"- , "1969-1--1 = 1969-01-01"- , "1969-1-0 = 1969-01-01"- , "1969-1-1 = 1969-01-01"- , "1969-1-2 = 1969-01-02"- , "1969-1-27 = 1969-01-27"- , "1969-1-28 = 1969-01-28"- , "1969-1-29 = 1969-01-29"- , "1969-1-30 = 1969-01-30"- , "1969-1-31 = 1969-01-31"- , "1969-1-32 = 1969-01-31"- , "1969-1-40 = 1969-01-31"- , "1969-2--7 = 1969-02-01"- , "1969-2--1 = 1969-02-01"- , "1969-2-0 = 1969-02-01"- , "1969-2-1 = 1969-02-01"- , "1969-2-2 = 1969-02-02"- , "1969-2-27 = 1969-02-27"- , "1969-2-28 = 1969-02-28"- , "1969-2-29 = 1969-02-28"- , "1969-2-30 = 1969-02-28"- , "1969-2-31 = 1969-02-28"- , "1969-2-32 = 1969-02-28"- , "1969-2-40 = 1969-02-28"- , "1969-12--7 = 1969-12-01"- , "1969-12--1 = 1969-12-01"- , "1969-12-0 = 1969-12-01"- , "1969-12-1 = 1969-12-01"- , "1969-12-2 = 1969-12-02"- , "1969-12-27 = 1969-12-27"- , "1969-12-28 = 1969-12-28"- , "1969-12-29 = 1969-12-29"- , "1969-12-30 = 1969-12-30"- , "1969-12-31 = 1969-12-31"- , "1969-12-32 = 1969-12-31"- , "1969-12-40 = 1969-12-31"- , "1969-13--7 = 1969-12-01"- , "1969-13--1 = 1969-12-01"- , "1969-13-0 = 1969-12-01"- , "1969-13-1 = 1969-12-01"- , "1969-13-2 = 1969-12-02"- , "1969-13-27 = 1969-12-27"- , "1969-13-28 = 1969-12-28"- , "1969-13-29 = 1969-12-29"- , "1969-13-30 = 1969-12-30"- , "1969-13-31 = 1969-12-31"- , "1969-13-32 = 1969-12-31"- , "1969-13-40 = 1969-12-31"- , "1969-17--7 = 1969-12-01"- , "1969-17--1 = 1969-12-01"- , "1969-17-0 = 1969-12-01"- , "1969-17-1 = 1969-12-01"- , "1969-17-2 = 1969-12-02"- , "1969-17-27 = 1969-12-27"- , "1969-17-28 = 1969-12-28"- , "1969-17-29 = 1969-12-29"- , "1969-17-30 = 1969-12-30"- , "1969-17-31 = 1969-12-31"- , "1969-17-32 = 1969-12-31"- , "1969-17-40 = 1969-12-31"- , "1971--20--7 = 1971-01-01"- , "1971--20--1 = 1971-01-01"- , "1971--20-0 = 1971-01-01"- , "1971--20-1 = 1971-01-01"- , "1971--20-2 = 1971-01-02"- , "1971--20-27 = 1971-01-27"- , "1971--20-28 = 1971-01-28"- , "1971--20-29 = 1971-01-29"- , "1971--20-30 = 1971-01-30"- , "1971--20-31 = 1971-01-31"- , "1971--20-32 = 1971-01-31"- , "1971--20-40 = 1971-01-31"- , "1971--1--7 = 1971-01-01"- , "1971--1--1 = 1971-01-01"- , "1971--1-0 = 1971-01-01"- , "1971--1-1 = 1971-01-01"- , "1971--1-2 = 1971-01-02"- , "1971--1-27 = 1971-01-27"- , "1971--1-28 = 1971-01-28"- , "1971--1-29 = 1971-01-29"- , "1971--1-30 = 1971-01-30"- , "1971--1-31 = 1971-01-31"- , "1971--1-32 = 1971-01-31"- , "1971--1-40 = 1971-01-31"- , "1971-0--7 = 1971-01-01"- , "1971-0--1 = 1971-01-01"- , "1971-0-0 = 1971-01-01"- , "1971-0-1 = 1971-01-01"- , "1971-0-2 = 1971-01-02"- , "1971-0-27 = 1971-01-27"- , "1971-0-28 = 1971-01-28"- , "1971-0-29 = 1971-01-29"- , "1971-0-30 = 1971-01-30"- , "1971-0-31 = 1971-01-31"- , "1971-0-32 = 1971-01-31"- , "1971-0-40 = 1971-01-31"- , "1971-1--7 = 1971-01-01"- , "1971-1--1 = 1971-01-01"- , "1971-1-0 = 1971-01-01"- , "1971-1-1 = 1971-01-01"- , "1971-1-2 = 1971-01-02"- , "1971-1-27 = 1971-01-27"- , "1971-1-28 = 1971-01-28"- , "1971-1-29 = 1971-01-29"- , "1971-1-30 = 1971-01-30"- , "1971-1-31 = 1971-01-31"- , "1971-1-32 = 1971-01-31"- , "1971-1-40 = 1971-01-31"- , "1971-2--7 = 1971-02-01"- , "1971-2--1 = 1971-02-01"- , "1971-2-0 = 1971-02-01"- , "1971-2-1 = 1971-02-01"- , "1971-2-2 = 1971-02-02"- , "1971-2-27 = 1971-02-27"- , "1971-2-28 = 1971-02-28"- , "1971-2-29 = 1971-02-28"- , "1971-2-30 = 1971-02-28"- , "1971-2-31 = 1971-02-28"- , "1971-2-32 = 1971-02-28"- , "1971-2-40 = 1971-02-28"- , "1971-12--7 = 1971-12-01"- , "1971-12--1 = 1971-12-01"- , "1971-12-0 = 1971-12-01"- , "1971-12-1 = 1971-12-01"- , "1971-12-2 = 1971-12-02"- , "1971-12-27 = 1971-12-27"- , "1971-12-28 = 1971-12-28"- , "1971-12-29 = 1971-12-29"- , "1971-12-30 = 1971-12-30"- , "1971-12-31 = 1971-12-31"- , "1971-12-32 = 1971-12-31"- , "1971-12-40 = 1971-12-31"- , "1971-13--7 = 1971-12-01"- , "1971-13--1 = 1971-12-01"- , "1971-13-0 = 1971-12-01"- , "1971-13-1 = 1971-12-01"- , "1971-13-2 = 1971-12-02"- , "1971-13-27 = 1971-12-27"- , "1971-13-28 = 1971-12-28"- , "1971-13-29 = 1971-12-29"- , "1971-13-30 = 1971-12-30"- , "1971-13-31 = 1971-12-31"- , "1971-13-32 = 1971-12-31"- , "1971-13-40 = 1971-12-31"- , "1971-17--7 = 1971-12-01"- , "1971-17--1 = 1971-12-01"- , "1971-17-0 = 1971-12-01"- , "1971-17-1 = 1971-12-01"- , "1971-17-2 = 1971-12-02"- , "1971-17-27 = 1971-12-27"- , "1971-17-28 = 1971-12-28"- , "1971-17-29 = 1971-12-29"- , "1971-17-30 = 1971-12-30"- , "1971-17-31 = 1971-12-31"- , "1971-17-32 = 1971-12-31"- , "1971-17-40 = 1971-12-31"- ]--clipDatesISOWeekDayRef :: [String]-clipDatesISOWeekDayRef =- [ "1968-W-20--2 = 1968-W01-1"- , "1968-W-20--1 = 1968-W01-1"- , "1968-W-20-0 = 1968-W01-1"- , "1968-W-20-1 = 1968-W01-1"- , "1968-W-20-4 = 1968-W01-4"- , "1968-W-20-6 = 1968-W01-6"- , "1968-W-20-7 = 1968-W01-7"- , "1968-W-20-8 = 1968-W01-7"- , "1968-W-20-9 = 1968-W01-7"- , "1968-W-1--2 = 1968-W01-1"- , "1968-W-1--1 = 1968-W01-1"- , "1968-W-1-0 = 1968-W01-1"- , "1968-W-1-1 = 1968-W01-1"- , "1968-W-1-4 = 1968-W01-4"- , "1968-W-1-6 = 1968-W01-6"- , "1968-W-1-7 = 1968-W01-7"- , "1968-W-1-8 = 1968-W01-7"- , "1968-W-1-9 = 1968-W01-7"- , "1968-W0--2 = 1968-W01-1"- , "1968-W0--1 = 1968-W01-1"- , "1968-W0-0 = 1968-W01-1"- , "1968-W0-1 = 1968-W01-1"- , "1968-W0-4 = 1968-W01-4"- , "1968-W0-6 = 1968-W01-6"- , "1968-W0-7 = 1968-W01-7"- , "1968-W0-8 = 1968-W01-7"- , "1968-W0-9 = 1968-W01-7"- , "1968-W1--2 = 1968-W01-1"- , "1968-W1--1 = 1968-W01-1"- , "1968-W1-0 = 1968-W01-1"- , "1968-W1-1 = 1968-W01-1"- , "1968-W1-4 = 1968-W01-4"- , "1968-W1-6 = 1968-W01-6"- , "1968-W1-7 = 1968-W01-7"- , "1968-W1-8 = 1968-W01-7"- , "1968-W1-9 = 1968-W01-7"- , "1968-W20--2 = 1968-W20-1"- , "1968-W20--1 = 1968-W20-1"- , "1968-W20-0 = 1968-W20-1"- , "1968-W20-1 = 1968-W20-1"- , "1968-W20-4 = 1968-W20-4"- , "1968-W20-6 = 1968-W20-6"- , "1968-W20-7 = 1968-W20-7"- , "1968-W20-8 = 1968-W20-7"- , "1968-W20-9 = 1968-W20-7"- , "1968-W51--2 = 1968-W51-1"- , "1968-W51--1 = 1968-W51-1"- , "1968-W51-0 = 1968-W51-1"- , "1968-W51-1 = 1968-W51-1"- , "1968-W51-4 = 1968-W51-4"- , "1968-W51-6 = 1968-W51-6"- , "1968-W51-7 = 1968-W51-7"- , "1968-W51-8 = 1968-W51-7"- , "1968-W51-9 = 1968-W51-7"- , "1968-W52--2 = 1968-W52-1"- , "1968-W52--1 = 1968-W52-1"- , "1968-W52-0 = 1968-W52-1"- , "1968-W52-1 = 1968-W52-1"- , "1968-W52-4 = 1968-W52-4"- , "1968-W52-6 = 1968-W52-6"- , "1968-W52-7 = 1968-W52-7"- , "1968-W52-8 = 1968-W52-7"- , "1968-W52-9 = 1968-W52-7"- , "1968-W53--2 = 1968-W52-1"- , "1968-W53--1 = 1968-W52-1"- , "1968-W53-0 = 1968-W52-1"- , "1968-W53-1 = 1968-W52-1"- , "1968-W53-4 = 1968-W52-4"- , "1968-W53-6 = 1968-W52-6"- , "1968-W53-7 = 1968-W52-7"- , "1968-W53-8 = 1968-W52-7"- , "1968-W53-9 = 1968-W52-7"- , "1968-W54--2 = 1968-W52-1"- , "1968-W54--1 = 1968-W52-1"- , "1968-W54-0 = 1968-W52-1"- , "1968-W54-1 = 1968-W52-1"- , "1968-W54-4 = 1968-W52-4"- , "1968-W54-6 = 1968-W52-6"- , "1968-W54-7 = 1968-W52-7"- , "1968-W54-8 = 1968-W52-7"- , "1968-W54-9 = 1968-W52-7"- , "1969-W-20--2 = 1969-W01-1"- , "1969-W-20--1 = 1969-W01-1"- , "1969-W-20-0 = 1969-W01-1"- , "1969-W-20-1 = 1969-W01-1"- , "1969-W-20-4 = 1969-W01-4"- , "1969-W-20-6 = 1969-W01-6"- , "1969-W-20-7 = 1969-W01-7"- , "1969-W-20-8 = 1969-W01-7"- , "1969-W-20-9 = 1969-W01-7"- , "1969-W-1--2 = 1969-W01-1"- , "1969-W-1--1 = 1969-W01-1"- , "1969-W-1-0 = 1969-W01-1"- , "1969-W-1-1 = 1969-W01-1"- , "1969-W-1-4 = 1969-W01-4"- , "1969-W-1-6 = 1969-W01-6"- , "1969-W-1-7 = 1969-W01-7"- , "1969-W-1-8 = 1969-W01-7"- , "1969-W-1-9 = 1969-W01-7"- , "1969-W0--2 = 1969-W01-1"- , "1969-W0--1 = 1969-W01-1"- , "1969-W0-0 = 1969-W01-1"- , "1969-W0-1 = 1969-W01-1"- , "1969-W0-4 = 1969-W01-4"- , "1969-W0-6 = 1969-W01-6"- , "1969-W0-7 = 1969-W01-7"- , "1969-W0-8 = 1969-W01-7"- , "1969-W0-9 = 1969-W01-7"- , "1969-W1--2 = 1969-W01-1"- , "1969-W1--1 = 1969-W01-1"- , "1969-W1-0 = 1969-W01-1"- , "1969-W1-1 = 1969-W01-1"- , "1969-W1-4 = 1969-W01-4"- , "1969-W1-6 = 1969-W01-6"- , "1969-W1-7 = 1969-W01-7"- , "1969-W1-8 = 1969-W01-7"- , "1969-W1-9 = 1969-W01-7"- , "1969-W20--2 = 1969-W20-1"- , "1969-W20--1 = 1969-W20-1"- , "1969-W20-0 = 1969-W20-1"- , "1969-W20-1 = 1969-W20-1"- , "1969-W20-4 = 1969-W20-4"- , "1969-W20-6 = 1969-W20-6"- , "1969-W20-7 = 1969-W20-7"- , "1969-W20-8 = 1969-W20-7"- , "1969-W20-9 = 1969-W20-7"- , "1969-W51--2 = 1969-W51-1"- , "1969-W51--1 = 1969-W51-1"- , "1969-W51-0 = 1969-W51-1"- , "1969-W51-1 = 1969-W51-1"- , "1969-W51-4 = 1969-W51-4"- , "1969-W51-6 = 1969-W51-6"- , "1969-W51-7 = 1969-W51-7"- , "1969-W51-8 = 1969-W51-7"- , "1969-W51-9 = 1969-W51-7"- , "1969-W52--2 = 1969-W52-1"- , "1969-W52--1 = 1969-W52-1"- , "1969-W52-0 = 1969-W52-1"- , "1969-W52-1 = 1969-W52-1"- , "1969-W52-4 = 1969-W52-4"- , "1969-W52-6 = 1969-W52-6"- , "1969-W52-7 = 1969-W52-7"- , "1969-W52-8 = 1969-W52-7"- , "1969-W52-9 = 1969-W52-7"- , "1969-W53--2 = 1969-W52-1"- , "1969-W53--1 = 1969-W52-1"- , "1969-W53-0 = 1969-W52-1"- , "1969-W53-1 = 1969-W52-1"- , "1969-W53-4 = 1969-W52-4"- , "1969-W53-6 = 1969-W52-6"- , "1969-W53-7 = 1969-W52-7"- , "1969-W53-8 = 1969-W52-7"- , "1969-W53-9 = 1969-W52-7"- , "1969-W54--2 = 1969-W52-1"- , "1969-W54--1 = 1969-W52-1"- , "1969-W54-0 = 1969-W52-1"- , "1969-W54-1 = 1969-W52-1"- , "1969-W54-4 = 1969-W52-4"- , "1969-W54-6 = 1969-W52-6"- , "1969-W54-7 = 1969-W52-7"- , "1969-W54-8 = 1969-W52-7"- , "1969-W54-9 = 1969-W52-7"- , "2004-W-20--2 = 2004-W01-1"- , "2004-W-20--1 = 2004-W01-1"- , "2004-W-20-0 = 2004-W01-1"- , "2004-W-20-1 = 2004-W01-1"- , "2004-W-20-4 = 2004-W01-4"- , "2004-W-20-6 = 2004-W01-6"- , "2004-W-20-7 = 2004-W01-7"- , "2004-W-20-8 = 2004-W01-7"- , "2004-W-20-9 = 2004-W01-7"- , "2004-W-1--2 = 2004-W01-1"- , "2004-W-1--1 = 2004-W01-1"- , "2004-W-1-0 = 2004-W01-1"- , "2004-W-1-1 = 2004-W01-1"- , "2004-W-1-4 = 2004-W01-4"- , "2004-W-1-6 = 2004-W01-6"- , "2004-W-1-7 = 2004-W01-7"- , "2004-W-1-8 = 2004-W01-7"- , "2004-W-1-9 = 2004-W01-7"- , "2004-W0--2 = 2004-W01-1"- , "2004-W0--1 = 2004-W01-1"- , "2004-W0-0 = 2004-W01-1"- , "2004-W0-1 = 2004-W01-1"- , "2004-W0-4 = 2004-W01-4"- , "2004-W0-6 = 2004-W01-6"- , "2004-W0-7 = 2004-W01-7"- , "2004-W0-8 = 2004-W01-7"- , "2004-W0-9 = 2004-W01-7"- , "2004-W1--2 = 2004-W01-1"- , "2004-W1--1 = 2004-W01-1"- , "2004-W1-0 = 2004-W01-1"- , "2004-W1-1 = 2004-W01-1"- , "2004-W1-4 = 2004-W01-4"- , "2004-W1-6 = 2004-W01-6"- , "2004-W1-7 = 2004-W01-7"- , "2004-W1-8 = 2004-W01-7"- , "2004-W1-9 = 2004-W01-7"- , "2004-W20--2 = 2004-W20-1"- , "2004-W20--1 = 2004-W20-1"- , "2004-W20-0 = 2004-W20-1"- , "2004-W20-1 = 2004-W20-1"- , "2004-W20-4 = 2004-W20-4"- , "2004-W20-6 = 2004-W20-6"- , "2004-W20-7 = 2004-W20-7"- , "2004-W20-8 = 2004-W20-7"- , "2004-W20-9 = 2004-W20-7"- , "2004-W51--2 = 2004-W51-1"- , "2004-W51--1 = 2004-W51-1"- , "2004-W51-0 = 2004-W51-1"- , "2004-W51-1 = 2004-W51-1"- , "2004-W51-4 = 2004-W51-4"- , "2004-W51-6 = 2004-W51-6"- , "2004-W51-7 = 2004-W51-7"- , "2004-W51-8 = 2004-W51-7"- , "2004-W51-9 = 2004-W51-7"- , "2004-W52--2 = 2004-W52-1"- , "2004-W52--1 = 2004-W52-1"- , "2004-W52-0 = 2004-W52-1"- , "2004-W52-1 = 2004-W52-1"- , "2004-W52-4 = 2004-W52-4"- , "2004-W52-6 = 2004-W52-6"- , "2004-W52-7 = 2004-W52-7"- , "2004-W52-8 = 2004-W52-7"- , "2004-W52-9 = 2004-W52-7"- , "2004-W53--2 = 2004-W53-1"- , "2004-W53--1 = 2004-W53-1"- , "2004-W53-0 = 2004-W53-1"- , "2004-W53-1 = 2004-W53-1"- , "2004-W53-4 = 2004-W53-4"- , "2004-W53-6 = 2004-W53-6"- , "2004-W53-7 = 2004-W53-7"- , "2004-W53-8 = 2004-W53-7"- , "2004-W53-9 = 2004-W53-7"- , "2004-W54--2 = 2004-W53-1"- , "2004-W54--1 = 2004-W53-1"- , "2004-W54-0 = 2004-W53-1"- , "2004-W54-1 = 2004-W53-1"- , "2004-W54-4 = 2004-W53-4"- , "2004-W54-6 = 2004-W53-6"- , "2004-W54-7 = 2004-W53-7"- , "2004-W54-8 = 2004-W53-7"- , "2004-W54-9 = 2004-W53-7"- ]+ [ "1968--4 = 1968-001",+ "1968-0 = 1968-001",+ "1968-1 = 1968-001",+ "1968-200 = 1968-200",+ "1968-364 = 1968-364",+ "1968-365 = 1968-365",+ "1968-366 = 1968-366",+ "1968-367 = 1968-366",+ "1968-700 = 1968-366",+ "1969--4 = 1969-001",+ "1969-0 = 1969-001",+ "1969-1 = 1969-001",+ "1969-200 = 1969-200",+ "1969-364 = 1969-364",+ "1969-365 = 1969-365",+ "1969-366 = 1969-365",+ "1969-367 = 1969-365",+ "1969-700 = 1969-365",+ "1971--4 = 1971-001",+ "1971-0 = 1971-001",+ "1971-1 = 1971-001",+ "1971-200 = 1971-200",+ "1971-364 = 1971-364",+ "1971-365 = 1971-365",+ "1971-366 = 1971-365",+ "1971-367 = 1971-365",+ "1971-700 = 1971-365"+ ]++clipDatesGregorianDayRef :: [String]+clipDatesGregorianDayRef =+ [ "1968--20--7 = 1968-01-01",+ "1968--20--1 = 1968-01-01",+ "1968--20-0 = 1968-01-01",+ "1968--20-1 = 1968-01-01",+ "1968--20-2 = 1968-01-02",+ "1968--20-27 = 1968-01-27",+ "1968--20-28 = 1968-01-28",+ "1968--20-29 = 1968-01-29",+ "1968--20-30 = 1968-01-30",+ "1968--20-31 = 1968-01-31",+ "1968--20-32 = 1968-01-31",+ "1968--20-40 = 1968-01-31",+ "1968--1--7 = 1968-01-01",+ "1968--1--1 = 1968-01-01",+ "1968--1-0 = 1968-01-01",+ "1968--1-1 = 1968-01-01",+ "1968--1-2 = 1968-01-02",+ "1968--1-27 = 1968-01-27",+ "1968--1-28 = 1968-01-28",+ "1968--1-29 = 1968-01-29",+ "1968--1-30 = 1968-01-30",+ "1968--1-31 = 1968-01-31",+ "1968--1-32 = 1968-01-31",+ "1968--1-40 = 1968-01-31",+ "1968-0--7 = 1968-01-01",+ "1968-0--1 = 1968-01-01",+ "1968-0-0 = 1968-01-01",+ "1968-0-1 = 1968-01-01",+ "1968-0-2 = 1968-01-02",+ "1968-0-27 = 1968-01-27",+ "1968-0-28 = 1968-01-28",+ "1968-0-29 = 1968-01-29",+ "1968-0-30 = 1968-01-30",+ "1968-0-31 = 1968-01-31",+ "1968-0-32 = 1968-01-31",+ "1968-0-40 = 1968-01-31",+ "1968-1--7 = 1968-01-01",+ "1968-1--1 = 1968-01-01",+ "1968-1-0 = 1968-01-01",+ "1968-1-1 = 1968-01-01",+ "1968-1-2 = 1968-01-02",+ "1968-1-27 = 1968-01-27",+ "1968-1-28 = 1968-01-28",+ "1968-1-29 = 1968-01-29",+ "1968-1-30 = 1968-01-30",+ "1968-1-31 = 1968-01-31",+ "1968-1-32 = 1968-01-31",+ "1968-1-40 = 1968-01-31",+ "1968-2--7 = 1968-02-01",+ "1968-2--1 = 1968-02-01",+ "1968-2-0 = 1968-02-01",+ "1968-2-1 = 1968-02-01",+ "1968-2-2 = 1968-02-02",+ "1968-2-27 = 1968-02-27",+ "1968-2-28 = 1968-02-28",+ "1968-2-29 = 1968-02-29",+ "1968-2-30 = 1968-02-29",+ "1968-2-31 = 1968-02-29",+ "1968-2-32 = 1968-02-29",+ "1968-2-40 = 1968-02-29",+ "1968-12--7 = 1968-12-01",+ "1968-12--1 = 1968-12-01",+ "1968-12-0 = 1968-12-01",+ "1968-12-1 = 1968-12-01",+ "1968-12-2 = 1968-12-02",+ "1968-12-27 = 1968-12-27",+ "1968-12-28 = 1968-12-28",+ "1968-12-29 = 1968-12-29",+ "1968-12-30 = 1968-12-30",+ "1968-12-31 = 1968-12-31",+ "1968-12-32 = 1968-12-31",+ "1968-12-40 = 1968-12-31",+ "1968-13--7 = 1968-12-01",+ "1968-13--1 = 1968-12-01",+ "1968-13-0 = 1968-12-01",+ "1968-13-1 = 1968-12-01",+ "1968-13-2 = 1968-12-02",+ "1968-13-27 = 1968-12-27",+ "1968-13-28 = 1968-12-28",+ "1968-13-29 = 1968-12-29",+ "1968-13-30 = 1968-12-30",+ "1968-13-31 = 1968-12-31",+ "1968-13-32 = 1968-12-31",+ "1968-13-40 = 1968-12-31",+ "1968-17--7 = 1968-12-01",+ "1968-17--1 = 1968-12-01",+ "1968-17-0 = 1968-12-01",+ "1968-17-1 = 1968-12-01",+ "1968-17-2 = 1968-12-02",+ "1968-17-27 = 1968-12-27",+ "1968-17-28 = 1968-12-28",+ "1968-17-29 = 1968-12-29",+ "1968-17-30 = 1968-12-30",+ "1968-17-31 = 1968-12-31",+ "1968-17-32 = 1968-12-31",+ "1968-17-40 = 1968-12-31",+ "1969--20--7 = 1969-01-01",+ "1969--20--1 = 1969-01-01",+ "1969--20-0 = 1969-01-01",+ "1969--20-1 = 1969-01-01",+ "1969--20-2 = 1969-01-02",+ "1969--20-27 = 1969-01-27",+ "1969--20-28 = 1969-01-28",+ "1969--20-29 = 1969-01-29",+ "1969--20-30 = 1969-01-30",+ "1969--20-31 = 1969-01-31",+ "1969--20-32 = 1969-01-31",+ "1969--20-40 = 1969-01-31",+ "1969--1--7 = 1969-01-01",+ "1969--1--1 = 1969-01-01",+ "1969--1-0 = 1969-01-01",+ "1969--1-1 = 1969-01-01",+ "1969--1-2 = 1969-01-02",+ "1969--1-27 = 1969-01-27",+ "1969--1-28 = 1969-01-28",+ "1969--1-29 = 1969-01-29",+ "1969--1-30 = 1969-01-30",+ "1969--1-31 = 1969-01-31",+ "1969--1-32 = 1969-01-31",+ "1969--1-40 = 1969-01-31",+ "1969-0--7 = 1969-01-01",+ "1969-0--1 = 1969-01-01",+ "1969-0-0 = 1969-01-01",+ "1969-0-1 = 1969-01-01",+ "1969-0-2 = 1969-01-02",+ "1969-0-27 = 1969-01-27",+ "1969-0-28 = 1969-01-28",+ "1969-0-29 = 1969-01-29",+ "1969-0-30 = 1969-01-30",+ "1969-0-31 = 1969-01-31",+ "1969-0-32 = 1969-01-31",+ "1969-0-40 = 1969-01-31",+ "1969-1--7 = 1969-01-01",+ "1969-1--1 = 1969-01-01",+ "1969-1-0 = 1969-01-01",+ "1969-1-1 = 1969-01-01",+ "1969-1-2 = 1969-01-02",+ "1969-1-27 = 1969-01-27",+ "1969-1-28 = 1969-01-28",+ "1969-1-29 = 1969-01-29",+ "1969-1-30 = 1969-01-30",+ "1969-1-31 = 1969-01-31",+ "1969-1-32 = 1969-01-31",+ "1969-1-40 = 1969-01-31",+ "1969-2--7 = 1969-02-01",+ "1969-2--1 = 1969-02-01",+ "1969-2-0 = 1969-02-01",+ "1969-2-1 = 1969-02-01",+ "1969-2-2 = 1969-02-02",+ "1969-2-27 = 1969-02-27",+ "1969-2-28 = 1969-02-28",+ "1969-2-29 = 1969-02-28",+ "1969-2-30 = 1969-02-28",+ "1969-2-31 = 1969-02-28",+ "1969-2-32 = 1969-02-28",+ "1969-2-40 = 1969-02-28",+ "1969-12--7 = 1969-12-01",+ "1969-12--1 = 1969-12-01",+ "1969-12-0 = 1969-12-01",+ "1969-12-1 = 1969-12-01",+ "1969-12-2 = 1969-12-02",+ "1969-12-27 = 1969-12-27",+ "1969-12-28 = 1969-12-28",+ "1969-12-29 = 1969-12-29",+ "1969-12-30 = 1969-12-30",+ "1969-12-31 = 1969-12-31",+ "1969-12-32 = 1969-12-31",+ "1969-12-40 = 1969-12-31",+ "1969-13--7 = 1969-12-01",+ "1969-13--1 = 1969-12-01",+ "1969-13-0 = 1969-12-01",+ "1969-13-1 = 1969-12-01",+ "1969-13-2 = 1969-12-02",+ "1969-13-27 = 1969-12-27",+ "1969-13-28 = 1969-12-28",+ "1969-13-29 = 1969-12-29",+ "1969-13-30 = 1969-12-30",+ "1969-13-31 = 1969-12-31",+ "1969-13-32 = 1969-12-31",+ "1969-13-40 = 1969-12-31",+ "1969-17--7 = 1969-12-01",+ "1969-17--1 = 1969-12-01",+ "1969-17-0 = 1969-12-01",+ "1969-17-1 = 1969-12-01",+ "1969-17-2 = 1969-12-02",+ "1969-17-27 = 1969-12-27",+ "1969-17-28 = 1969-12-28",+ "1969-17-29 = 1969-12-29",+ "1969-17-30 = 1969-12-30",+ "1969-17-31 = 1969-12-31",+ "1969-17-32 = 1969-12-31",+ "1969-17-40 = 1969-12-31",+ "1971--20--7 = 1971-01-01",+ "1971--20--1 = 1971-01-01",+ "1971--20-0 = 1971-01-01",+ "1971--20-1 = 1971-01-01",+ "1971--20-2 = 1971-01-02",+ "1971--20-27 = 1971-01-27",+ "1971--20-28 = 1971-01-28",+ "1971--20-29 = 1971-01-29",+ "1971--20-30 = 1971-01-30",+ "1971--20-31 = 1971-01-31",+ "1971--20-32 = 1971-01-31",+ "1971--20-40 = 1971-01-31",+ "1971--1--7 = 1971-01-01",+ "1971--1--1 = 1971-01-01",+ "1971--1-0 = 1971-01-01",+ "1971--1-1 = 1971-01-01",+ "1971--1-2 = 1971-01-02",+ "1971--1-27 = 1971-01-27",+ "1971--1-28 = 1971-01-28",+ "1971--1-29 = 1971-01-29",+ "1971--1-30 = 1971-01-30",+ "1971--1-31 = 1971-01-31",+ "1971--1-32 = 1971-01-31",+ "1971--1-40 = 1971-01-31",+ "1971-0--7 = 1971-01-01",+ "1971-0--1 = 1971-01-01",+ "1971-0-0 = 1971-01-01",+ "1971-0-1 = 1971-01-01",+ "1971-0-2 = 1971-01-02",+ "1971-0-27 = 1971-01-27",+ "1971-0-28 = 1971-01-28",+ "1971-0-29 = 1971-01-29",+ "1971-0-30 = 1971-01-30",+ "1971-0-31 = 1971-01-31",+ "1971-0-32 = 1971-01-31",+ "1971-0-40 = 1971-01-31",+ "1971-1--7 = 1971-01-01",+ "1971-1--1 = 1971-01-01",+ "1971-1-0 = 1971-01-01",+ "1971-1-1 = 1971-01-01",+ "1971-1-2 = 1971-01-02",+ "1971-1-27 = 1971-01-27",+ "1971-1-28 = 1971-01-28",+ "1971-1-29 = 1971-01-29",+ "1971-1-30 = 1971-01-30",+ "1971-1-31 = 1971-01-31",+ "1971-1-32 = 1971-01-31",+ "1971-1-40 = 1971-01-31",+ "1971-2--7 = 1971-02-01",+ "1971-2--1 = 1971-02-01",+ "1971-2-0 = 1971-02-01",+ "1971-2-1 = 1971-02-01",+ "1971-2-2 = 1971-02-02",+ "1971-2-27 = 1971-02-27",+ "1971-2-28 = 1971-02-28",+ "1971-2-29 = 1971-02-28",+ "1971-2-30 = 1971-02-28",+ "1971-2-31 = 1971-02-28",+ "1971-2-32 = 1971-02-28",+ "1971-2-40 = 1971-02-28",+ "1971-12--7 = 1971-12-01",+ "1971-12--1 = 1971-12-01",+ "1971-12-0 = 1971-12-01",+ "1971-12-1 = 1971-12-01",+ "1971-12-2 = 1971-12-02",+ "1971-12-27 = 1971-12-27",+ "1971-12-28 = 1971-12-28",+ "1971-12-29 = 1971-12-29",+ "1971-12-30 = 1971-12-30",+ "1971-12-31 = 1971-12-31",+ "1971-12-32 = 1971-12-31",+ "1971-12-40 = 1971-12-31",+ "1971-13--7 = 1971-12-01",+ "1971-13--1 = 1971-12-01",+ "1971-13-0 = 1971-12-01",+ "1971-13-1 = 1971-12-01",+ "1971-13-2 = 1971-12-02",+ "1971-13-27 = 1971-12-27",+ "1971-13-28 = 1971-12-28",+ "1971-13-29 = 1971-12-29",+ "1971-13-30 = 1971-12-30",+ "1971-13-31 = 1971-12-31",+ "1971-13-32 = 1971-12-31",+ "1971-13-40 = 1971-12-31",+ "1971-17--7 = 1971-12-01",+ "1971-17--1 = 1971-12-01",+ "1971-17-0 = 1971-12-01",+ "1971-17-1 = 1971-12-01",+ "1971-17-2 = 1971-12-02",+ "1971-17-27 = 1971-12-27",+ "1971-17-28 = 1971-12-28",+ "1971-17-29 = 1971-12-29",+ "1971-17-30 = 1971-12-30",+ "1971-17-31 = 1971-12-31",+ "1971-17-32 = 1971-12-31",+ "1971-17-40 = 1971-12-31"+ ]++clipDatesISOWeekDayRef :: [String]+clipDatesISOWeekDayRef =+ [ "1968-W-20--2 = 1968-W01-1",+ "1968-W-20--1 = 1968-W01-1",+ "1968-W-20-0 = 1968-W01-1",+ "1968-W-20-1 = 1968-W01-1",+ "1968-W-20-4 = 1968-W01-4",+ "1968-W-20-6 = 1968-W01-6",+ "1968-W-20-7 = 1968-W01-7",+ "1968-W-20-8 = 1968-W01-7",+ "1968-W-20-9 = 1968-W01-7",+ "1968-W-1--2 = 1968-W01-1",+ "1968-W-1--1 = 1968-W01-1",+ "1968-W-1-0 = 1968-W01-1",+ "1968-W-1-1 = 1968-W01-1",+ "1968-W-1-4 = 1968-W01-4",+ "1968-W-1-6 = 1968-W01-6",+ "1968-W-1-7 = 1968-W01-7",+ "1968-W-1-8 = 1968-W01-7",+ "1968-W-1-9 = 1968-W01-7",+ "1968-W0--2 = 1968-W01-1",+ "1968-W0--1 = 1968-W01-1",+ "1968-W0-0 = 1968-W01-1",+ "1968-W0-1 = 1968-W01-1",+ "1968-W0-4 = 1968-W01-4",+ "1968-W0-6 = 1968-W01-6",+ "1968-W0-7 = 1968-W01-7",+ "1968-W0-8 = 1968-W01-7",+ "1968-W0-9 = 1968-W01-7",+ "1968-W1--2 = 1968-W01-1",+ "1968-W1--1 = 1968-W01-1",+ "1968-W1-0 = 1968-W01-1",+ "1968-W1-1 = 1968-W01-1",+ "1968-W1-4 = 1968-W01-4",+ "1968-W1-6 = 1968-W01-6",+ "1968-W1-7 = 1968-W01-7",+ "1968-W1-8 = 1968-W01-7",+ "1968-W1-9 = 1968-W01-7",+ "1968-W20--2 = 1968-W20-1",+ "1968-W20--1 = 1968-W20-1",+ "1968-W20-0 = 1968-W20-1",+ "1968-W20-1 = 1968-W20-1",+ "1968-W20-4 = 1968-W20-4",+ "1968-W20-6 = 1968-W20-6",+ "1968-W20-7 = 1968-W20-7",+ "1968-W20-8 = 1968-W20-7",+ "1968-W20-9 = 1968-W20-7",+ "1968-W51--2 = 1968-W51-1",+ "1968-W51--1 = 1968-W51-1",+ "1968-W51-0 = 1968-W51-1",+ "1968-W51-1 = 1968-W51-1",+ "1968-W51-4 = 1968-W51-4",+ "1968-W51-6 = 1968-W51-6",+ "1968-W51-7 = 1968-W51-7",+ "1968-W51-8 = 1968-W51-7",+ "1968-W51-9 = 1968-W51-7",+ "1968-W52--2 = 1968-W52-1",+ "1968-W52--1 = 1968-W52-1",+ "1968-W52-0 = 1968-W52-1",+ "1968-W52-1 = 1968-W52-1",+ "1968-W52-4 = 1968-W52-4",+ "1968-W52-6 = 1968-W52-6",+ "1968-W52-7 = 1968-W52-7",+ "1968-W52-8 = 1968-W52-7",+ "1968-W52-9 = 1968-W52-7",+ "1968-W53--2 = 1968-W52-1",+ "1968-W53--1 = 1968-W52-1",+ "1968-W53-0 = 1968-W52-1",+ "1968-W53-1 = 1968-W52-1",+ "1968-W53-4 = 1968-W52-4",+ "1968-W53-6 = 1968-W52-6",+ "1968-W53-7 = 1968-W52-7",+ "1968-W53-8 = 1968-W52-7",+ "1968-W53-9 = 1968-W52-7",+ "1968-W54--2 = 1968-W52-1",+ "1968-W54--1 = 1968-W52-1",+ "1968-W54-0 = 1968-W52-1",+ "1968-W54-1 = 1968-W52-1",+ "1968-W54-4 = 1968-W52-4",+ "1968-W54-6 = 1968-W52-6",+ "1968-W54-7 = 1968-W52-7",+ "1968-W54-8 = 1968-W52-7",+ "1968-W54-9 = 1968-W52-7",+ "1969-W-20--2 = 1969-W01-1",+ "1969-W-20--1 = 1969-W01-1",+ "1969-W-20-0 = 1969-W01-1",+ "1969-W-20-1 = 1969-W01-1",+ "1969-W-20-4 = 1969-W01-4",+ "1969-W-20-6 = 1969-W01-6",+ "1969-W-20-7 = 1969-W01-7",+ "1969-W-20-8 = 1969-W01-7",+ "1969-W-20-9 = 1969-W01-7",+ "1969-W-1--2 = 1969-W01-1",+ "1969-W-1--1 = 1969-W01-1",+ "1969-W-1-0 = 1969-W01-1",+ "1969-W-1-1 = 1969-W01-1",+ "1969-W-1-4 = 1969-W01-4",+ "1969-W-1-6 = 1969-W01-6",+ "1969-W-1-7 = 1969-W01-7",+ "1969-W-1-8 = 1969-W01-7",+ "1969-W-1-9 = 1969-W01-7",+ "1969-W0--2 = 1969-W01-1",+ "1969-W0--1 = 1969-W01-1",+ "1969-W0-0 = 1969-W01-1",+ "1969-W0-1 = 1969-W01-1",+ "1969-W0-4 = 1969-W01-4",+ "1969-W0-6 = 1969-W01-6",+ "1969-W0-7 = 1969-W01-7",+ "1969-W0-8 = 1969-W01-7",+ "1969-W0-9 = 1969-W01-7",+ "1969-W1--2 = 1969-W01-1",+ "1969-W1--1 = 1969-W01-1",+ "1969-W1-0 = 1969-W01-1",+ "1969-W1-1 = 1969-W01-1",+ "1969-W1-4 = 1969-W01-4",+ "1969-W1-6 = 1969-W01-6",+ "1969-W1-7 = 1969-W01-7",+ "1969-W1-8 = 1969-W01-7",+ "1969-W1-9 = 1969-W01-7",+ "1969-W20--2 = 1969-W20-1",+ "1969-W20--1 = 1969-W20-1",+ "1969-W20-0 = 1969-W20-1",+ "1969-W20-1 = 1969-W20-1",+ "1969-W20-4 = 1969-W20-4",+ "1969-W20-6 = 1969-W20-6",+ "1969-W20-7 = 1969-W20-7",+ "1969-W20-8 = 1969-W20-7",+ "1969-W20-9 = 1969-W20-7",+ "1969-W51--2 = 1969-W51-1",+ "1969-W51--1 = 1969-W51-1",+ "1969-W51-0 = 1969-W51-1",+ "1969-W51-1 = 1969-W51-1",+ "1969-W51-4 = 1969-W51-4",+ "1969-W51-6 = 1969-W51-6",+ "1969-W51-7 = 1969-W51-7",+ "1969-W51-8 = 1969-W51-7",+ "1969-W51-9 = 1969-W51-7",+ "1969-W52--2 = 1969-W52-1",+ "1969-W52--1 = 1969-W52-1",+ "1969-W52-0 = 1969-W52-1",+ "1969-W52-1 = 1969-W52-1",+ "1969-W52-4 = 1969-W52-4",+ "1969-W52-6 = 1969-W52-6",+ "1969-W52-7 = 1969-W52-7",+ "1969-W52-8 = 1969-W52-7",+ "1969-W52-9 = 1969-W52-7",+ "1969-W53--2 = 1969-W52-1",+ "1969-W53--1 = 1969-W52-1",+ "1969-W53-0 = 1969-W52-1",+ "1969-W53-1 = 1969-W52-1",+ "1969-W53-4 = 1969-W52-4",+ "1969-W53-6 = 1969-W52-6",+ "1969-W53-7 = 1969-W52-7",+ "1969-W53-8 = 1969-W52-7",+ "1969-W53-9 = 1969-W52-7",+ "1969-W54--2 = 1969-W52-1",+ "1969-W54--1 = 1969-W52-1",+ "1969-W54-0 = 1969-W52-1",+ "1969-W54-1 = 1969-W52-1",+ "1969-W54-4 = 1969-W52-4",+ "1969-W54-6 = 1969-W52-6",+ "1969-W54-7 = 1969-W52-7",+ "1969-W54-8 = 1969-W52-7",+ "1969-W54-9 = 1969-W52-7",+ "2004-W-20--2 = 2004-W01-1",+ "2004-W-20--1 = 2004-W01-1",+ "2004-W-20-0 = 2004-W01-1",+ "2004-W-20-1 = 2004-W01-1",+ "2004-W-20-4 = 2004-W01-4",+ "2004-W-20-6 = 2004-W01-6",+ "2004-W-20-7 = 2004-W01-7",+ "2004-W-20-8 = 2004-W01-7",+ "2004-W-20-9 = 2004-W01-7",+ "2004-W-1--2 = 2004-W01-1",+ "2004-W-1--1 = 2004-W01-1",+ "2004-W-1-0 = 2004-W01-1",+ "2004-W-1-1 = 2004-W01-1",+ "2004-W-1-4 = 2004-W01-4",+ "2004-W-1-6 = 2004-W01-6",+ "2004-W-1-7 = 2004-W01-7",+ "2004-W-1-8 = 2004-W01-7",+ "2004-W-1-9 = 2004-W01-7",+ "2004-W0--2 = 2004-W01-1",+ "2004-W0--1 = 2004-W01-1",+ "2004-W0-0 = 2004-W01-1",+ "2004-W0-1 = 2004-W01-1",+ "2004-W0-4 = 2004-W01-4",+ "2004-W0-6 = 2004-W01-6",+ "2004-W0-7 = 2004-W01-7",+ "2004-W0-8 = 2004-W01-7",+ "2004-W0-9 = 2004-W01-7",+ "2004-W1--2 = 2004-W01-1",+ "2004-W1--1 = 2004-W01-1",+ "2004-W1-0 = 2004-W01-1",+ "2004-W1-1 = 2004-W01-1",+ "2004-W1-4 = 2004-W01-4",+ "2004-W1-6 = 2004-W01-6",+ "2004-W1-7 = 2004-W01-7",+ "2004-W1-8 = 2004-W01-7",+ "2004-W1-9 = 2004-W01-7",+ "2004-W20--2 = 2004-W20-1",+ "2004-W20--1 = 2004-W20-1",+ "2004-W20-0 = 2004-W20-1",+ "2004-W20-1 = 2004-W20-1",+ "2004-W20-4 = 2004-W20-4",+ "2004-W20-6 = 2004-W20-6",+ "2004-W20-7 = 2004-W20-7",+ "2004-W20-8 = 2004-W20-7",+ "2004-W20-9 = 2004-W20-7",+ "2004-W51--2 = 2004-W51-1",+ "2004-W51--1 = 2004-W51-1",+ "2004-W51-0 = 2004-W51-1",+ "2004-W51-1 = 2004-W51-1",+ "2004-W51-4 = 2004-W51-4",+ "2004-W51-6 = 2004-W51-6",+ "2004-W51-7 = 2004-W51-7",+ "2004-W51-8 = 2004-W51-7",+ "2004-W51-9 = 2004-W51-7",+ "2004-W52--2 = 2004-W52-1",+ "2004-W52--1 = 2004-W52-1",+ "2004-W52-0 = 2004-W52-1",+ "2004-W52-1 = 2004-W52-1",+ "2004-W52-4 = 2004-W52-4",+ "2004-W52-6 = 2004-W52-6",+ "2004-W52-7 = 2004-W52-7",+ "2004-W52-8 = 2004-W52-7",+ "2004-W52-9 = 2004-W52-7",+ "2004-W53--2 = 2004-W53-1",+ "2004-W53--1 = 2004-W53-1",+ "2004-W53-0 = 2004-W53-1",+ "2004-W53-1 = 2004-W53-1",+ "2004-W53-4 = 2004-W53-4",+ "2004-W53-6 = 2004-W53-6",+ "2004-W53-7 = 2004-W53-7",+ "2004-W53-8 = 2004-W53-7",+ "2004-W53-9 = 2004-W53-7",+ "2004-W54--2 = 2004-W53-1",+ "2004-W54--1 = 2004-W53-1",+ "2004-W54-0 = 2004-W53-1",+ "2004-W54-1 = 2004-W53-1",+ "2004-W54-4 = 2004-W53-4",+ "2004-W54-6 = 2004-W53-6",+ "2004-W54-7 = 2004-W53-7",+ "2004-W54-8 = 2004-W53-7",+ "2004-W54-9 = 2004-W53-7"+ ]
test/main/Test/Calendar/ConvertBack.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.ConvertBack (- convertBack,-) where+module Test.Calendar.ConvertBack+ ( convertBack,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.Julian.Compat@@ -9,30 +10,28 @@ import Test.Tasty import Test.Tasty.HUnit -checkDay :: Show t => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> String+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+ 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)- ]+ [ 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])
test/main/Test/Calendar/DayPeriod.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.DayPeriod (- testDayPeriod,-) where+module Test.Calendar.DayPeriod+ ( testDayPeriod,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.Month.Compat@@ -11,171 +12,165 @@ import Test.Tasty.QuickCheck newtype WDay = MkWDay Day- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WDay where- arbitrary = do- (MkWYear y) <- arbitrary- (MkWMonthOfYear m) <- arbitrary- (MkWDayOfMonth d) <- arbitrary- pure $ MkWDay $ YearMonthDay y m d+ arbitrary = do+ (MkWYear y) <- arbitrary+ (MkWMonthOfYear m) <- arbitrary+ (MkWDayOfMonth d) <- arbitrary+ pure $ MkWDay $ YearMonthDay y m d newtype WYear = MkWYear Year- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WYear where- arbitrary = fmap MkWYear $ choose (-1000, 3000)+ arbitrary = fmap MkWYear $ choose (-1000, 3000) newtype WMonthOfYear = MkWMonthOfYear MonthOfYear- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WMonthOfYear where- arbitrary = fmap MkWMonthOfYear $ choose (-5, 17)+ arbitrary = fmap MkWMonthOfYear $ choose (-5, 17) newtype WMonth = MkWMonth Month- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WMonth where- arbitrary = do- (MkWYear y) <- arbitrary- (MkWMonthOfYear m) <- arbitrary- pure $ MkWMonth $ YearMonth y m+ arbitrary = do+ (MkWYear y) <- arbitrary+ (MkWMonthOfYear m) <- arbitrary+ pure $ MkWMonth $ YearMonth y m newtype WDayOfMonth = MkWDayOfMonth DayOfMonth- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WDayOfMonth where- arbitrary = fmap MkWDayOfMonth $ choose (-5, 35)+ arbitrary = fmap MkWDayOfMonth $ choose (-5, 35) newtype WQuarterOfYear = MkWQuarterOfYear QuarterOfYear- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WQuarterOfYear where- arbitrary = fmap MkWQuarterOfYear $ elements [Q1 .. Q4]+ arbitrary = fmap MkWQuarterOfYear $ elements [Q1 .. Q4] newtype WQuarter = MkWQuarter Quarter- deriving (Eq, Show)+ deriving (Eq, Show) instance Arbitrary WQuarter where- arbitrary = do- (MkWYear y) <- arbitrary- (MkWQuarterOfYear q) <- arbitrary- pure $ MkWQuarter $ YearQuarter y q+ arbitrary = do+ (MkWYear y) <- arbitrary+ (MkWQuarterOfYear q) <- arbitrary+ pure $ MkWQuarter $ YearQuarter y q testDayPeriod :: TestTree testDayPeriod =- testGroup- "DayPeriod"- [ testGroup "Day" testDay- , testGroup "Month" testMonth- , testGroup "Quarter" testQuarter- , testGroup "Year" testYear- , testGroup "Week" testWeek- ]+ testGroup+ "DayPeriod"+ [ testGroup "Day" testDay,+ testGroup "Month" testMonth,+ testGroup "Quarter" testQuarter,+ testGroup "Year" testYear,+ testGroup "Week" testWeek+ ] testDay :: [TestTree] testDay =- [ testProperty "periodFirstDay" $ \(MkWDay d) ->- periodFirstDay d == d- , testProperty "periodLastDay" $ \(MkWDay d) ->- periodLastDay d == d- , testProperty "dayPeriod" $ \(MkWDay d) ->- dayPeriod d == d- , testProperty "periodAllDays" $ \(MkWDay d) ->- periodAllDays d == [d]- , testProperty "periodLength" $ \(MkWDay d) ->- periodLength d == 1- ]+ [ testProperty "periodFirstDay" $ \(MkWDay d) ->+ periodFirstDay d == d,+ testProperty "periodLastDay" $ \(MkWDay d) ->+ periodLastDay d == d,+ testProperty "dayPeriod" $ \(MkWDay d) ->+ dayPeriod d == d,+ testProperty "periodAllDays" $ \(MkWDay d) ->+ periodAllDays d == [d],+ testProperty "periodLength" $ \(MkWDay d) ->+ periodLength d == 1+ ] testMonth :: [TestTree] testMonth =- [ testProperty "periodFirstDay" $ \(MkWMonth my@(YearMonth y m)) ->- periodFirstDay my == YearMonthDay y m 1- , testGroup- "periodLastDay"- [ testCase "leap year" $- periodLastDay (YearMonth 2024 February) @?= YearMonthDay 2024 February 29- , testCase "regular year" $- periodLastDay (YearMonth 2023 February) @?= YearMonthDay 2023 February 28- ]- , testProperty "dayPeriod" $ \(MkWMonth my@(YearMonth y m), MkWDayOfMonth d) ->- dayPeriod (YearMonthDay y m d) == my- , testProperty "periodAllDays" $ \(MkWMonth my@(YearMonth y1 m1)) ->- all (== (y1, m1)) $ map (\(YearMonthDay y2 m2 _) -> (y2, m2)) $ periodAllDays my- , testGroup- "periodLength"- [ testProperty "property tests" $ \(MkWMonth my) ->- periodLength my >= 28- , testCase "leap year" $- periodLength (YearMonth 2024 February) @?= 29- , testCase "regular year" $- periodLength (YearMonth 2023 February) @?= 28- ]- ]+ [ testProperty "periodFirstDay" $ \(MkWMonth my@(YearMonth y m)) ->+ periodFirstDay my == YearMonthDay y m 1,+ testGroup+ "periodLastDay"+ [ testCase "leap year" $+ periodLastDay (YearMonth 2024 February) @?= YearMonthDay 2024 February 29,+ testCase "regular year" $+ periodLastDay (YearMonth 2023 February) @?= YearMonthDay 2023 February 28+ ],+ testProperty "dayPeriod" $ \(MkWMonth my@(YearMonth y m), MkWDayOfMonth d) ->+ dayPeriod (YearMonthDay y m d) == my,+ testProperty "periodAllDays" $ \(MkWMonth my@(YearMonth y1 m1)) ->+ all (== (y1, m1)) $ map (\(YearMonthDay y2 m2 _) -> (y2, m2)) $ periodAllDays my,+ testGroup+ "periodLength"+ [ testProperty "property tests" $ \(MkWMonth my) ->+ periodLength my >= 28,+ testCase "leap year" $+ periodLength (YearMonth 2024 February) @?= 29,+ testCase "regular year" $+ periodLength (YearMonth 2023 February) @?= 28+ ]+ ] testQuarter :: [TestTree] testQuarter =- [ testGroup- "periodFirstDay"- [ testProperty "Q1" $ \(MkWYear y) ->- periodFirstDay (YearQuarter y Q1) == YearMonthDay y January 1- , testProperty "Q2" $ \(MkWYear y) ->- periodFirstDay (YearQuarter y Q2) == YearMonthDay y April 1- , testProperty "Q3" $ \(MkWYear y) ->- periodFirstDay (YearQuarter y Q3) == YearMonthDay y July 1- , testProperty "Q4" $ \(MkWYear y) ->- periodFirstDay (YearQuarter y Q4) == YearMonthDay y October 1- ]- , testGroup- "periodLastDay"- [ testProperty "Q1" $ \(MkWYear y) ->- periodLastDay (YearQuarter y Q1) == YearMonthDay y March 31- , testProperty "Q2" $ \(MkWYear y) ->- periodLastDay (YearQuarter y Q2) == YearMonthDay y June 30- , testProperty "Q3" $ \(MkWYear y) ->- periodLastDay (YearQuarter y Q3) == YearMonthDay y September 30- , testProperty "Q4" $ \(MkWYear y) ->- periodLastDay (YearQuarter y Q4) == YearMonthDay y December 31- ]- , testProperty "dayPeriod" $ \(MkWMonth my@(YearMonth y m), MkWDayOfMonth d) ->- dayPeriod (YearMonthDay y m d) == monthQuarter my- , testProperty "periodAllDays" $ \(MkWQuarter q) ->- all (== q) $ map dayQuarter $ periodAllDays q- , testProperty "periodLength" $ \(MkWQuarter q) ->- periodLength q >= 90- ]+ [ testGroup+ "periodFirstDay"+ [ testProperty "Q1" $ \(MkWYear y) ->+ periodFirstDay (YearQuarter y Q1) == YearMonthDay y January 1,+ testProperty "Q2" $ \(MkWYear y) ->+ periodFirstDay (YearQuarter y Q2) == YearMonthDay y April 1,+ testProperty "Q3" $ \(MkWYear y) ->+ periodFirstDay (YearQuarter y Q3) == YearMonthDay y July 1,+ testProperty "Q4" $ \(MkWYear y) ->+ periodFirstDay (YearQuarter y Q4) == YearMonthDay y October 1+ ],+ testGroup+ "periodLastDay"+ [ testProperty "Q1" $ \(MkWYear y) ->+ periodLastDay (YearQuarter y Q1) == YearMonthDay y March 31,+ testProperty "Q2" $ \(MkWYear y) ->+ periodLastDay (YearQuarter y Q2) == YearMonthDay y June 30,+ testProperty "Q3" $ \(MkWYear y) ->+ periodLastDay (YearQuarter y Q3) == YearMonthDay y September 30,+ testProperty "Q4" $ \(MkWYear y) ->+ periodLastDay (YearQuarter y Q4) == YearMonthDay y December 31+ ],+ testProperty "dayPeriod" $ \(MkWMonth my@(YearMonth y m), MkWDayOfMonth d) ->+ dayPeriod (YearMonthDay y m d) == monthQuarter my,+ testProperty "periodAllDays" $ \(MkWQuarter q) ->+ all (== q) $ map dayQuarter $ periodAllDays q,+ testProperty "periodLength" $ \(MkWQuarter q) ->+ periodLength q >= 90+ ] testYear :: [TestTree] testYear =- [ testProperty "periodFirstDay" $ \(MkWYear y) ->- periodFirstDay y == YearMonthDay y January 1- , testProperty "periodLastDay" $ \(MkWYear y) ->- periodLastDay y == YearMonthDay y December 31- , testProperty "dayPeriod" $ \(MkWYear y, MkWMonthOfYear m, MkWDayOfMonth d) ->- dayPeriod (YearMonthDay y m d) == y- , testProperty "periodAllDays" $ \(MkWYear y1) ->- all (== y1) $ map (\(YearMonthDay y2 _ _) -> y2) $ periodAllDays y1- , testProperty "periodLength" $ \(MkWYear y) ->- periodLength y >= 365- ]+ [ testProperty "periodFirstDay" $ \(MkWYear y) ->+ periodFirstDay y == YearMonthDay y January 1,+ testProperty "periodLastDay" $ \(MkWYear y) ->+ periodLastDay y == YearMonthDay y December 31,+ testProperty "dayPeriod" $ \(MkWYear y, MkWMonthOfYear m, MkWDayOfMonth d) ->+ dayPeriod (YearMonthDay y m d) == y,+ testProperty "periodAllDays" $ \(MkWYear y1) ->+ all (== y1) $ map (\(YearMonthDay y2 _ _) -> y2) $ periodAllDays y1,+ testProperty "periodLength" $ \(MkWYear y) ->+ periodLength y >= 365+ ] testWeek :: [TestTree] testWeek =- [ testProperty "weekFirstDay/weekLastDay range" $ \dw (MkWDay d) ->- let- f = weekFirstDay dw d- l = weekLastDay dw d- in- f <= d && d <= l- , testProperty "weekFirstDay/weekLastDay range" $ \dw (MkWDay d) ->- let- f = weekFirstDay dw d- l = weekLastDay dw d- in- addDays 6 f == l- , testProperty "weekFirstDay dayOfWeek" $ \dw (MkWDay d) ->- let- f = weekFirstDay dw d- in- dayOfWeek f == dw- ]+ [ testProperty "weekFirstDay/weekLastDay range" $ \dw (MkWDay d) ->+ let f = weekFirstDay dw d+ l = weekLastDay dw d+ in f <= d && d <= l,+ testProperty "weekFirstDay/weekLastDay range" $ \dw (MkWDay d) ->+ let f = weekFirstDay dw d+ l = weekLastDay dw d+ in addDays 6 f == l,+ testProperty "weekFirstDay dayOfWeek" $ \dw (MkWDay d) ->+ let f = weekFirstDay dw d+ in dayOfWeek f == dw+ ]
test/main/Test/Calendar/Duration.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.Duration (- testDuration,-) where+module Test.Calendar.Duration+ ( testDuration,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.Julian.Compat@@ -10,11 +11,11 @@ import Test.Tasty.QuickCheck hiding (reason) data AddDiff = MkAddDiff- { adName :: String- , adAdd :: CalendarDiffDays -> Day -> Day- , adDifference :: Day -> Day -> CalendarDiffDays- , adFromYMD :: Integer -> Int -> Int -> Day- }+ { adName :: String,+ adAdd :: CalendarDiffDays -> Day -> Day,+ adDifference :: Day -> Day -> CalendarDiffDays,+ adFromYMD :: Integer -> Int -> Int -> Day+ } gregorianClip :: AddDiff gregorianClip = MkAddDiff "gregorianClip" addGregorianDurationClip diffGregorianDurationClip fromGregorian@@ -30,85 +31,81 @@ addDiffs :: [AddDiff] addDiffs =- [ gregorianClip- , gregorianRollOver- , julianClip- , julianRollOver- ]+ [ gregorianClip,+ gregorianRollOver,+ julianClip,+ julianRollOver+ ] testAddDiff :: AddDiff -> TestTree-testAddDiff MkAddDiff{..} = testProperty adName $ \day1 day2 ->- adAdd (adDifference day2 day1) day1 == day2+testAddDiff MkAddDiff {..} = testProperty adName $ \day1 day2 ->+ adAdd (adDifference day2 day1) day1 == day2 testAddDiffs :: TestTree testAddDiffs =- testGroup- "add-diff"- $ fmap testAddDiff addDiffs+ testGroup+ "add-diff"+ $ fmap testAddDiff addDiffs newtype Smallish = MkSmallish Integer deriving (Eq, Ord) deriving newtype instance Show Smallish instance Arbitrary Smallish where- arbitrary = do- b <- arbitrary- n <- if b then choose (0, 60) else return 30- return $ MkSmallish n+ arbitrary = do+ b <- arbitrary+ n <- if b then choose (0, 60) else return 30+ return $ MkSmallish n testPositiveDiff :: AddDiff -> TestTree-testPositiveDiff MkAddDiff{..} = testProperty adName $ \day1 (MkSmallish i) ->- let- day2 = addDays i day1- r = adDifference day2 day1- in- property $ cdMonths r >= 0 && cdDays r >= 0+testPositiveDiff MkAddDiff {..} = testProperty adName $ \day1 (MkSmallish i) ->+ let day2 = addDays i day1+ r = adDifference day2 day1+ in property $ cdMonths r >= 0 && cdDays r >= 0 testPositiveDiffs :: TestTree testPositiveDiffs =- testGroup- "positive-diff"- $ fmap testPositiveDiff addDiffs+ testGroup+ "positive-diff"+ $ fmap testPositiveDiff addDiffs testSpecific :: AddDiff -> (Integer, Int, Int) -> (Integer, Int, Int) -> (Integer, Integer) -> TestTree-testSpecific MkAddDiff{..} (y2, m2, d2) (y1, m1, d1) (em, ed) =- let- day1 = adFromYMD y1 m1 d1- day2 = adFromYMD y2 m2 d2- expected = CalendarDiffDays em ed- found = adDifference day2 day1- in- testCase (adName ++ ": " ++ show day2 ++ " - " ++ show day1) $ do- assertEqual "add" day2 $ adAdd found day1- assertEqual "diff" expected found+testSpecific MkAddDiff {..} (y2, m2, d2) (y1, m1, d1) (em, ed) =+ let day1 = adFromYMD y1 m1 d1+ day2 = adFromYMD y2 m2 d2+ expected = CalendarDiffDays em ed+ found = adDifference day2 day1+ in testCase (adName ++ ": " ++ show day2 ++ " - " ++ show day1) $ do+ assertEqual "add" day2 $ adAdd found day1+ assertEqual "diff" expected found testSpecificPair :: (Integer, Int, Int) -> (Integer, Int, Int) -> (Integer, Integer) -> (Integer, Integer) -> TestTree testSpecificPair day2 day1 clipD rollD =- testGroup- (show day2 ++ " - " ++ show day1)- [ testSpecific gregorianClip day2 day1 clipD- , testSpecific gregorianRollOver day2 day1 rollD- , testSpecific julianClip day2 day1 clipD- , testSpecific julianRollOver day2 day1 rollD- ]+ testGroup+ (show day2 ++ " - " ++ show day1)+ [ testSpecific gregorianClip day2 day1 clipD,+ testSpecific gregorianRollOver day2 day1 rollD,+ testSpecific julianClip day2 day1 clipD,+ testSpecific julianRollOver day2 day1 rollD+ ] testSpecifics :: TestTree testSpecifics =- testGroup- "specific"- [ testSpecificPair (2017, 04, 07) (2017, 04, 07) (0, 0) (0, 0)- , testSpecific gregorianClip (2017, 04, 07) (2017, 04, 01) (0, 6)- , testSpecific gregorianClip (2017, 04, 01) (2017, 04, 07) (0, -6)- , testSpecific gregorianClip (2017, 04, 07) (2017, 02, 01) (2, 6)- , testSpecific gregorianClip (2017, 02, 01) (2017, 04, 07) (-2, -6)- , testSpecificPair (2000, 03, 01) (2000, 01, 30) (1, 1) (1, 0)- , testSpecificPair (2001, 03, 01) (2001, 01, 30) (1, 1) (0, 30)- , testSpecificPair (2001, 03, 01) (2000, 01, 30) (13, 1) (12, 30)- , testSpecificPair (2000, 03, 01) (2000, 01, 31) (1, 1) (0, 30)- , testSpecificPair (2001, 03, 01) (2001, 01, 31) (1, 1) (0, 29)- , testSpecificPair (2001, 03, 01) (2000, 01, 31) (13, 1) (12, 29)- , testSpecificPair (2001, 10, 01) (2001, 08, 31) (1, 1) (1, 0)- ]+ testGroup+ "specific"+ [ testSpecificPair (2017, 04, 07) (2017, 04, 07) (0, 0) (0, 0),+ testSpecific gregorianClip (2017, 04, 07) (2017, 04, 01) (0, 6),+ testSpecific gregorianClip (2017, 04, 01) (2017, 04, 07) (0, -6),+ testSpecific gregorianClip (2017, 04, 07) (2017, 02, 01) (2, 6),+ testSpecific gregorianClip (2017, 02, 01) (2017, 04, 07) (-2, -6),+ testSpecificPair (2000, 03, 01) (2000, 01, 30) (1, 1) (1, 0),+ testSpecificPair (2001, 03, 01) (2001, 01, 30) (1, 1) (0, 30),+ testSpecificPair (2001, 03, 01) (2000, 01, 30) (13, 1) (12, 30),+ testSpecificPair (2000, 03, 01) (2000, 01, 31) (1, 1) (0, 30),+ testSpecificPair (2001, 03, 01) (2001, 01, 31) (1, 1) (0, 29),+ testSpecificPair (2001, 03, 01) (2000, 01, 31) (13, 1) (12, 29),+ testSpecificPair (2001, 10, 01) (2001, 08, 31) (1, 1) (1, 0)+ ] testDuration :: TestTree testDuration = testGroup "CalendarDiffDays" [testAddDiffs, testPositiveDiffs, testSpecifics]
test/main/Test/Calendar/Easter.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.Easter (- testEaster,-) where+module Test.Calendar.Easter+ ( testEaster,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.Easter.Compat@@ -18,22 +19,20 @@ testEaster :: TestTree testEaster =- testCase "testEaster" $- let- ds = unlines $ map (\day -> unwords [showWithWDay day, "->", showWithWDay (sundayAfter day)]) days- f y =- unwords- [ show y ++ ", Gregorian: moon,"- , show (gregorianPaschalMoon y) ++ ": Easter,"- , showWithWDay (gregorianEaster y)- ]- ++ "\n"- g y =- unwords- [ show y ++ ", Orthodox : moon,"- , show (orthodoxPaschalMoon y) ++ ": Easter,"- , showWithWDay (orthodoxEaster y)- ]- ++ "\n"- in- assertEqual "" testEasterRef $ ds ++ concatMap (\y -> f y ++ g y) [2000 .. 2020]+ testCase "testEaster" $+ let ds = unlines $ map (\day -> unwords [showWithWDay day, "->", showWithWDay (sundayAfter day)]) days+ f y =+ unwords+ [ show y ++ ", Gregorian: moon,",+ show (gregorianPaschalMoon y) ++ ": Easter,",+ showWithWDay (gregorianEaster y)+ ]+ ++ "\n"+ g y =+ unwords+ [ show y ++ ", Orthodox : moon,",+ show (orthodoxPaschalMoon y) ++ ": Easter,",+ showWithWDay (orthodoxEaster y)+ ]+ ++ "\n"+ in assertEqual "" testEasterRef $ ds ++ concatMap (\y -> f y ++ g y) [2000 .. 2020]
test/main/Test/Calendar/EasterRef.hs view
@@ -2,62 +2,62 @@ testEasterRef :: String testEasterRef =- unlines- [ "2003-12-27 Saturday -> 2003-12-28 Sunday"- , "2003-12-28 Sunday -> 2004-01-04 Sunday"- , "2003-12-29 Monday -> 2004-01-04 Sunday"- , "2003-12-30 Tuesday -> 2004-01-04 Sunday"- , "2003-12-31 Wednesday -> 2004-01-04 Sunday"- , "2004-01-01 Thursday -> 2004-01-04 Sunday"- , "2004-01-02 Friday -> 2004-01-04 Sunday"- , "2004-01-03 Saturday -> 2004-01-04 Sunday"- , "2004-01-04 Sunday -> 2004-01-11 Sunday"- , "2004-01-05 Monday -> 2004-01-11 Sunday"- , "2004-01-06 Tuesday -> 2004-01-11 Sunday"- , "2004-01-07 Wednesday -> 2004-01-11 Sunday"- , "2004-01-08 Thursday -> 2004-01-11 Sunday"- , "2004-01-09 Friday -> 2004-01-11 Sunday"- , "2004-01-10 Saturday -> 2004-01-11 Sunday"- , "2000, Gregorian: moon, 2000-04-18: Easter, 2000-04-23 Sunday"- , "2000, Orthodox : moon, 2000-04-23: Easter, 2000-04-30 Sunday"- , "2001, Gregorian: moon, 2001-04-08: Easter, 2001-04-15 Sunday"- , "2001, Orthodox : moon, 2001-04-12: Easter, 2001-04-15 Sunday"- , "2002, Gregorian: moon, 2002-03-28: Easter, 2002-03-31 Sunday"- , "2002, Orthodox : moon, 2002-05-01: Easter, 2002-05-05 Sunday"- , "2003, Gregorian: moon, 2003-04-16: Easter, 2003-04-20 Sunday"- , "2003, Orthodox : moon, 2003-04-20: Easter, 2003-04-27 Sunday"- , "2004, Gregorian: moon, 2004-04-05: Easter, 2004-04-11 Sunday"- , "2004, Orthodox : moon, 2004-04-09: Easter, 2004-04-11 Sunday"- , "2005, Gregorian: moon, 2005-03-25: Easter, 2005-03-27 Sunday"- , "2005, Orthodox : moon, 2005-04-28: Easter, 2005-05-01 Sunday"- , "2006, Gregorian: moon, 2006-04-13: Easter, 2006-04-16 Sunday"- , "2006, Orthodox : moon, 2006-04-17: Easter, 2006-04-23 Sunday"- , "2007, Gregorian: moon, 2007-04-02: Easter, 2007-04-08 Sunday"- , "2007, Orthodox : moon, 2007-04-06: Easter, 2007-04-08 Sunday"- , "2008, Gregorian: moon, 2008-03-22: Easter, 2008-03-23 Sunday"- , "2008, Orthodox : moon, 2008-04-25: Easter, 2008-04-27 Sunday"- , "2009, Gregorian: moon, 2009-04-10: Easter, 2009-04-12 Sunday"- , "2009, Orthodox : moon, 2009-04-14: Easter, 2009-04-19 Sunday"- , "2010, Gregorian: moon, 2010-03-30: Easter, 2010-04-04 Sunday"- , "2010, Orthodox : moon, 2010-04-03: Easter, 2010-04-04 Sunday"- , "2011, Gregorian: moon, 2011-04-18: Easter, 2011-04-24 Sunday"- , "2011, Orthodox : moon, 2011-04-22: Easter, 2011-04-24 Sunday"- , "2012, Gregorian: moon, 2012-04-07: Easter, 2012-04-08 Sunday"- , "2012, Orthodox : moon, 2012-04-11: Easter, 2012-04-15 Sunday"- , "2013, Gregorian: moon, 2013-03-27: Easter, 2013-03-31 Sunday"- , "2013, Orthodox : moon, 2013-04-30: Easter, 2013-05-05 Sunday"- , "2014, Gregorian: moon, 2014-04-14: Easter, 2014-04-20 Sunday"- , "2014, Orthodox : moon, 2014-04-18: Easter, 2014-04-20 Sunday"- , "2015, Gregorian: moon, 2015-04-03: Easter, 2015-04-05 Sunday"- , "2015, Orthodox : moon, 2015-04-07: Easter, 2015-04-12 Sunday"- , "2016, Gregorian: moon, 2016-03-23: Easter, 2016-03-27 Sunday"- , "2016, Orthodox : moon, 2016-04-26: Easter, 2016-05-01 Sunday"- , "2017, Gregorian: moon, 2017-04-11: Easter, 2017-04-16 Sunday"- , "2017, Orthodox : moon, 2017-04-15: Easter, 2017-04-16 Sunday"- , "2018, Gregorian: moon, 2018-03-31: Easter, 2018-04-01 Sunday"- , "2018, Orthodox : moon, 2018-04-04: Easter, 2018-04-08 Sunday"- , "2019, Gregorian: moon, 2019-04-18: Easter, 2019-04-21 Sunday"- , "2019, Orthodox : moon, 2019-04-23: Easter, 2019-04-28 Sunday"- , "2020, Gregorian: moon, 2020-04-08: Easter, 2020-04-12 Sunday"- , "2020, Orthodox : moon, 2020-04-12: Easter, 2020-04-19 Sunday"- ]+ unlines+ [ "2003-12-27 Saturday -> 2003-12-28 Sunday",+ "2003-12-28 Sunday -> 2004-01-04 Sunday",+ "2003-12-29 Monday -> 2004-01-04 Sunday",+ "2003-12-30 Tuesday -> 2004-01-04 Sunday",+ "2003-12-31 Wednesday -> 2004-01-04 Sunday",+ "2004-01-01 Thursday -> 2004-01-04 Sunday",+ "2004-01-02 Friday -> 2004-01-04 Sunday",+ "2004-01-03 Saturday -> 2004-01-04 Sunday",+ "2004-01-04 Sunday -> 2004-01-11 Sunday",+ "2004-01-05 Monday -> 2004-01-11 Sunday",+ "2004-01-06 Tuesday -> 2004-01-11 Sunday",+ "2004-01-07 Wednesday -> 2004-01-11 Sunday",+ "2004-01-08 Thursday -> 2004-01-11 Sunday",+ "2004-01-09 Friday -> 2004-01-11 Sunday",+ "2004-01-10 Saturday -> 2004-01-11 Sunday",+ "2000, Gregorian: moon, 2000-04-18: Easter, 2000-04-23 Sunday",+ "2000, Orthodox : moon, 2000-04-23: Easter, 2000-04-30 Sunday",+ "2001, Gregorian: moon, 2001-04-08: Easter, 2001-04-15 Sunday",+ "2001, Orthodox : moon, 2001-04-12: Easter, 2001-04-15 Sunday",+ "2002, Gregorian: moon, 2002-03-28: Easter, 2002-03-31 Sunday",+ "2002, Orthodox : moon, 2002-05-01: Easter, 2002-05-05 Sunday",+ "2003, Gregorian: moon, 2003-04-16: Easter, 2003-04-20 Sunday",+ "2003, Orthodox : moon, 2003-04-20: Easter, 2003-04-27 Sunday",+ "2004, Gregorian: moon, 2004-04-05: Easter, 2004-04-11 Sunday",+ "2004, Orthodox : moon, 2004-04-09: Easter, 2004-04-11 Sunday",+ "2005, Gregorian: moon, 2005-03-25: Easter, 2005-03-27 Sunday",+ "2005, Orthodox : moon, 2005-04-28: Easter, 2005-05-01 Sunday",+ "2006, Gregorian: moon, 2006-04-13: Easter, 2006-04-16 Sunday",+ "2006, Orthodox : moon, 2006-04-17: Easter, 2006-04-23 Sunday",+ "2007, Gregorian: moon, 2007-04-02: Easter, 2007-04-08 Sunday",+ "2007, Orthodox : moon, 2007-04-06: Easter, 2007-04-08 Sunday",+ "2008, Gregorian: moon, 2008-03-22: Easter, 2008-03-23 Sunday",+ "2008, Orthodox : moon, 2008-04-25: Easter, 2008-04-27 Sunday",+ "2009, Gregorian: moon, 2009-04-10: Easter, 2009-04-12 Sunday",+ "2009, Orthodox : moon, 2009-04-14: Easter, 2009-04-19 Sunday",+ "2010, Gregorian: moon, 2010-03-30: Easter, 2010-04-04 Sunday",+ "2010, Orthodox : moon, 2010-04-03: Easter, 2010-04-04 Sunday",+ "2011, Gregorian: moon, 2011-04-18: Easter, 2011-04-24 Sunday",+ "2011, Orthodox : moon, 2011-04-22: Easter, 2011-04-24 Sunday",+ "2012, Gregorian: moon, 2012-04-07: Easter, 2012-04-08 Sunday",+ "2012, Orthodox : moon, 2012-04-11: Easter, 2012-04-15 Sunday",+ "2013, Gregorian: moon, 2013-03-27: Easter, 2013-03-31 Sunday",+ "2013, Orthodox : moon, 2013-04-30: Easter, 2013-05-05 Sunday",+ "2014, Gregorian: moon, 2014-04-14: Easter, 2014-04-20 Sunday",+ "2014, Orthodox : moon, 2014-04-18: Easter, 2014-04-20 Sunday",+ "2015, Gregorian: moon, 2015-04-03: Easter, 2015-04-05 Sunday",+ "2015, Orthodox : moon, 2015-04-07: Easter, 2015-04-12 Sunday",+ "2016, Gregorian: moon, 2016-03-23: Easter, 2016-03-27 Sunday",+ "2016, Orthodox : moon, 2016-04-26: Easter, 2016-05-01 Sunday",+ "2017, Gregorian: moon, 2017-04-11: Easter, 2017-04-16 Sunday",+ "2017, Orthodox : moon, 2017-04-15: Easter, 2017-04-16 Sunday",+ "2018, Gregorian: moon, 2018-03-31: Easter, 2018-04-01 Sunday",+ "2018, Orthodox : moon, 2018-04-04: Easter, 2018-04-08 Sunday",+ "2019, Gregorian: moon, 2019-04-18: Easter, 2019-04-21 Sunday",+ "2019, Orthodox : moon, 2019-04-23: Easter, 2019-04-28 Sunday",+ "2020, Gregorian: moon, 2020-04-08: Easter, 2020-04-12 Sunday",+ "2020, Orthodox : moon, 2020-04-12: Easter, 2020-04-19 Sunday"+ ]
test/main/Test/Calendar/LongWeekYears.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.LongWeekYears (- longWeekYears,-) where+module Test.Calendar.LongWeekYears+ ( longWeekYears,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.WeekDate.Compat@@ -10,23 +11,23 @@ longYear :: Integer -> Bool longYear year =- case toWeekDate (fromGregorian year 12 31) of- (_, 53, _) -> True- _ -> False+ case toWeekDate (fromGregorian year 12 31) of+ (_, 53, _) -> True+ _ -> False showLongYear :: Integer -> String showLongYear year =- unwords- [ show year ++ ":"- , ( if isLeapYear year- then "L"- else " "- )- ++ ( if longYear year- then "*"- else " "- )- ]+ unwords+ [ show year ++ ":",+ ( if isLeapYear year+ then "L"+ else " "+ )+ ++ ( if longYear year+ then "*"+ else " "+ )+ ] longWeekYears :: TestTree longWeekYears = testCase "longWeekYears" $ assertEqual "" longWeekYearsRef $ unlines $ map showLongYear [1901 .. 2050]
test/main/Test/Calendar/LongWeekYearsRef.hs view
@@ -2,155 +2,155 @@ longWeekYearsRef :: String longWeekYearsRef =- unlines- [ "1901: "- , "1902: "- , "1903: *"- , "1904: L "- , "1905: "- , "1906: "- , "1907: "- , "1908: L*"- , "1909: "- , "1910: "- , "1911: "- , "1912: L "- , "1913: "- , "1914: *"- , "1915: "- , "1916: L "- , "1917: "- , "1918: "- , "1919: "- , "1920: L*"- , "1921: "- , "1922: "- , "1923: "- , "1924: L "- , "1925: *"- , "1926: "- , "1927: "- , "1928: L "- , "1929: "- , "1930: "- , "1931: *"- , "1932: L "- , "1933: "- , "1934: "- , "1935: "- , "1936: L*"- , "1937: "- , "1938: "- , "1939: "- , "1940: L "- , "1941: "- , "1942: *"- , "1943: "- , "1944: L "- , "1945: "- , "1946: "- , "1947: "- , "1948: L*"- , "1949: "- , "1950: "- , "1951: "- , "1952: L "- , "1953: *"- , "1954: "- , "1955: "- , "1956: L "- , "1957: "- , "1958: "- , "1959: *"- , "1960: L "- , "1961: "- , "1962: "- , "1963: "- , "1964: L*"- , "1965: "- , "1966: "- , "1967: "- , "1968: L "- , "1969: "- , "1970: *"- , "1971: "- , "1972: L "- , "1973: "- , "1974: "- , "1975: "- , "1976: L*"- , "1977: "- , "1978: "- , "1979: "- , "1980: L "- , "1981: *"- , "1982: "- , "1983: "- , "1984: L "- , "1985: "- , "1986: "- , "1987: *"- , "1988: L "- , "1989: "- , "1990: "- , "1991: "- , "1992: L*"- , "1993: "- , "1994: "- , "1995: "- , "1996: L "- , "1997: "- , "1998: *"- , "1999: "- , "2000: L "- , "2001: "- , "2002: "- , "2003: "- , "2004: L*"- , "2005: "- , "2006: "- , "2007: "- , "2008: L "- , "2009: *"- , "2010: "- , "2011: "- , "2012: L "- , "2013: "- , "2014: "- , "2015: *"- , "2016: L "- , "2017: "- , "2018: "- , "2019: "- , "2020: L*"- , "2021: "- , "2022: "- , "2023: "- , "2024: L "- , "2025: "- , "2026: *"- , "2027: "- , "2028: L "- , "2029: "- , "2030: "- , "2031: "- , "2032: L*"- , "2033: "- , "2034: "- , "2035: "- , "2036: L "- , "2037: *"- , "2038: "- , "2039: "- , "2040: L "- , "2041: "- , "2042: "- , "2043: *"- , "2044: L "- , "2045: "- , "2046: "- , "2047: "- , "2048: L*"- , "2049: "- , "2050: "- ]+ unlines+ [ "1901: ",+ "1902: ",+ "1903: *",+ "1904: L ",+ "1905: ",+ "1906: ",+ "1907: ",+ "1908: L*",+ "1909: ",+ "1910: ",+ "1911: ",+ "1912: L ",+ "1913: ",+ "1914: *",+ "1915: ",+ "1916: L ",+ "1917: ",+ "1918: ",+ "1919: ",+ "1920: L*",+ "1921: ",+ "1922: ",+ "1923: ",+ "1924: L ",+ "1925: *",+ "1926: ",+ "1927: ",+ "1928: L ",+ "1929: ",+ "1930: ",+ "1931: *",+ "1932: L ",+ "1933: ",+ "1934: ",+ "1935: ",+ "1936: L*",+ "1937: ",+ "1938: ",+ "1939: ",+ "1940: L ",+ "1941: ",+ "1942: *",+ "1943: ",+ "1944: L ",+ "1945: ",+ "1946: ",+ "1947: ",+ "1948: L*",+ "1949: ",+ "1950: ",+ "1951: ",+ "1952: L ",+ "1953: *",+ "1954: ",+ "1955: ",+ "1956: L ",+ "1957: ",+ "1958: ",+ "1959: *",+ "1960: L ",+ "1961: ",+ "1962: ",+ "1963: ",+ "1964: L*",+ "1965: ",+ "1966: ",+ "1967: ",+ "1968: L ",+ "1969: ",+ "1970: *",+ "1971: ",+ "1972: L ",+ "1973: ",+ "1974: ",+ "1975: ",+ "1976: L*",+ "1977: ",+ "1978: ",+ "1979: ",+ "1980: L ",+ "1981: *",+ "1982: ",+ "1983: ",+ "1984: L ",+ "1985: ",+ "1986: ",+ "1987: *",+ "1988: L ",+ "1989: ",+ "1990: ",+ "1991: ",+ "1992: L*",+ "1993: ",+ "1994: ",+ "1995: ",+ "1996: L ",+ "1997: ",+ "1998: *",+ "1999: ",+ "2000: L ",+ "2001: ",+ "2002: ",+ "2003: ",+ "2004: L*",+ "2005: ",+ "2006: ",+ "2007: ",+ "2008: L ",+ "2009: *",+ "2010: ",+ "2011: ",+ "2012: L ",+ "2013: ",+ "2014: ",+ "2015: *",+ "2016: L ",+ "2017: ",+ "2018: ",+ "2019: ",+ "2020: L*",+ "2021: ",+ "2022: ",+ "2023: ",+ "2024: L ",+ "2025: ",+ "2026: *",+ "2027: ",+ "2028: L ",+ "2029: ",+ "2030: ",+ "2031: ",+ "2032: L*",+ "2033: ",+ "2034: ",+ "2035: ",+ "2036: L ",+ "2037: *",+ "2038: ",+ "2039: ",+ "2040: L ",+ "2041: ",+ "2042: ",+ "2043: *",+ "2044: L ",+ "2045: ",+ "2046: ",+ "2047: ",+ "2048: L*",+ "2049: ",+ "2050: "+ ]
test/main/Test/Calendar/MonthDay.hs view
@@ -1,7 +1,10 @@-module Test.Calendar.MonthDay (- testMonthDay,-) where+module Test.Calendar.MonthDay+ ( testMonthDay,+ )+where +import Data.Time.Calendar.Compat+import Data.Time.Calendar.Month.Compat import Data.Time.Calendar.MonthDay.Compat import Test.Calendar.MonthDayRef import Test.Tasty@@ -9,28 +12,39 @@ showCompare :: (Eq a, Show a) => a -> String -> a -> String showCompare a1 b a2- | a1 == a2 = (show a1) ++ " == " ++ b+ | a1 == a2 = (show a1) ++ " == " ++ b showCompare a1 b a2 = "DIFF: " ++ (show a1) ++ " -> " ++ b ++ " -> " ++ (show a2) testMonthDay :: TestTree testMonthDay =- testCase "testMonthDay" $+ testGroup+ "MonthDay"+ [ testCase "good" $ assertEqual "" testMonthDayRef $- concat $- map (\isL -> unlines (leap isL : yearDays isL)) [False, True]+ concat $+ map (\isL -> unlines (leap isL : yearDays isL)) [False, True],+ testGroup+ "clip"+ [ testCase "12" $ assertEqual "" (YearMonthDay 2005 05 12) (MonthDay (MkMonth 24064) 12),+ testCase "1" $ assertEqual "" (YearMonthDay 2005 05 1) (MonthDay (MkMonth 24064) 1),+ testCase "0" $ assertEqual "" (YearMonthDay 2005 05 1) (MonthDay (MkMonth 24064) 0),+ testCase "-1" $ assertEqual "" (YearMonthDay 2005 05 1) (MonthDay (MkMonth 24064) (-1)),+ testCase "31" $ assertEqual "" (YearMonthDay 2005 05 31) (MonthDay (MkMonth 24064) 31),+ testCase "32" $ assertEqual "" (YearMonthDay 2005 05 31) (MonthDay (MkMonth 24064) 32),+ testCase "33" $ assertEqual "" (YearMonthDay 2005 05 31) (MonthDay (MkMonth 24064) 33)+ ]+ ] where leap isLeap =- if isLeap- then "Leap:"- else "Regular:"+ if isLeap+ then "Leap:"+ else "Regular:" yearDays isLeap =- map- ( \yd ->- let- (m, d) = dayOfYearToMonthAndDay isLeap yd- yd' = monthAndDayToDayOfYear isLeap m d- mdtext = show m ++ "-" ++ show d- in- showCompare yd mdtext yd'- )- [-2 .. 369]+ map+ ( \yd ->+ let (m, d) = dayOfYearToMonthAndDay isLeap yd+ yd' = monthAndDayToDayOfYear isLeap m d+ mdtext = show m ++ "-" ++ show d+ in showCompare yd mdtext yd'+ )+ [-2 .. 369]
test/main/Test/Calendar/MonthDayRef.hs view
@@ -2,751 +2,751 @@ testMonthDayRef :: String testMonthDayRef =- unlines- [ "Regular:"- , "DIFF: -2 -> 1-1 -> 1"- , "DIFF: -1 -> 1-1 -> 1"- , "DIFF: 0 -> 1-1 -> 1"- , "1 == 1-1"- , "2 == 1-2"- , "3 == 1-3"- , "4 == 1-4"- , "5 == 1-5"- , "6 == 1-6"- , "7 == 1-7"- , "8 == 1-8"- , "9 == 1-9"- , "10 == 1-10"- , "11 == 1-11"- , "12 == 1-12"- , "13 == 1-13"- , "14 == 1-14"- , "15 == 1-15"- , "16 == 1-16"- , "17 == 1-17"- , "18 == 1-18"- , "19 == 1-19"- , "20 == 1-20"- , "21 == 1-21"- , "22 == 1-22"- , "23 == 1-23"- , "24 == 1-24"- , "25 == 1-25"- , "26 == 1-26"- , "27 == 1-27"- , "28 == 1-28"- , "29 == 1-29"- , "30 == 1-30"- , "31 == 1-31"- , "32 == 2-1"- , "33 == 2-2"- , "34 == 2-3"- , "35 == 2-4"- , "36 == 2-5"- , "37 == 2-6"- , "38 == 2-7"- , "39 == 2-8"- , "40 == 2-9"- , "41 == 2-10"- , "42 == 2-11"- , "43 == 2-12"- , "44 == 2-13"- , "45 == 2-14"- , "46 == 2-15"- , "47 == 2-16"- , "48 == 2-17"- , "49 == 2-18"- , "50 == 2-19"- , "51 == 2-20"- , "52 == 2-21"- , "53 == 2-22"- , "54 == 2-23"- , "55 == 2-24"- , "56 == 2-25"- , "57 == 2-26"- , "58 == 2-27"- , "59 == 2-28"- , "60 == 3-1"- , "61 == 3-2"- , "62 == 3-3"- , "63 == 3-4"- , "64 == 3-5"- , "65 == 3-6"- , "66 == 3-7"- , "67 == 3-8"- , "68 == 3-9"- , "69 == 3-10"- , "70 == 3-11"- , "71 == 3-12"- , "72 == 3-13"- , "73 == 3-14"- , "74 == 3-15"- , "75 == 3-16"- , "76 == 3-17"- , "77 == 3-18"- , "78 == 3-19"- , "79 == 3-20"- , "80 == 3-21"- , "81 == 3-22"- , "82 == 3-23"- , "83 == 3-24"- , "84 == 3-25"- , "85 == 3-26"- , "86 == 3-27"- , "87 == 3-28"- , "88 == 3-29"- , "89 == 3-30"- , "90 == 3-31"- , "91 == 4-1"- , "92 == 4-2"- , "93 == 4-3"- , "94 == 4-4"- , "95 == 4-5"- , "96 == 4-6"- , "97 == 4-7"- , "98 == 4-8"- , "99 == 4-9"- , "100 == 4-10"- , "101 == 4-11"- , "102 == 4-12"- , "103 == 4-13"- , "104 == 4-14"- , "105 == 4-15"- , "106 == 4-16"- , "107 == 4-17"- , "108 == 4-18"- , "109 == 4-19"- , "110 == 4-20"- , "111 == 4-21"- , "112 == 4-22"- , "113 == 4-23"- , "114 == 4-24"- , "115 == 4-25"- , "116 == 4-26"- , "117 == 4-27"- , "118 == 4-28"- , "119 == 4-29"- , "120 == 4-30"- , "121 == 5-1"- , "122 == 5-2"- , "123 == 5-3"- , "124 == 5-4"- , "125 == 5-5"- , "126 == 5-6"- , "127 == 5-7"- , "128 == 5-8"- , "129 == 5-9"- , "130 == 5-10"- , "131 == 5-11"- , "132 == 5-12"- , "133 == 5-13"- , "134 == 5-14"- , "135 == 5-15"- , "136 == 5-16"- , "137 == 5-17"- , "138 == 5-18"- , "139 == 5-19"- , "140 == 5-20"- , "141 == 5-21"- , "142 == 5-22"- , "143 == 5-23"- , "144 == 5-24"- , "145 == 5-25"- , "146 == 5-26"- , "147 == 5-27"- , "148 == 5-28"- , "149 == 5-29"- , "150 == 5-30"- , "151 == 5-31"- , "152 == 6-1"- , "153 == 6-2"- , "154 == 6-3"- , "155 == 6-4"- , "156 == 6-5"- , "157 == 6-6"- , "158 == 6-7"- , "159 == 6-8"- , "160 == 6-9"- , "161 == 6-10"- , "162 == 6-11"- , "163 == 6-12"- , "164 == 6-13"- , "165 == 6-14"- , "166 == 6-15"- , "167 == 6-16"- , "168 == 6-17"- , "169 == 6-18"- , "170 == 6-19"- , "171 == 6-20"- , "172 == 6-21"- , "173 == 6-22"- , "174 == 6-23"- , "175 == 6-24"- , "176 == 6-25"- , "177 == 6-26"- , "178 == 6-27"- , "179 == 6-28"- , "180 == 6-29"- , "181 == 6-30"- , "182 == 7-1"- , "183 == 7-2"- , "184 == 7-3"- , "185 == 7-4"- , "186 == 7-5"- , "187 == 7-6"- , "188 == 7-7"- , "189 == 7-8"- , "190 == 7-9"- , "191 == 7-10"- , "192 == 7-11"- , "193 == 7-12"- , "194 == 7-13"- , "195 == 7-14"- , "196 == 7-15"- , "197 == 7-16"- , "198 == 7-17"- , "199 == 7-18"- , "200 == 7-19"- , "201 == 7-20"- , "202 == 7-21"- , "203 == 7-22"- , "204 == 7-23"- , "205 == 7-24"- , "206 == 7-25"- , "207 == 7-26"- , "208 == 7-27"- , "209 == 7-28"- , "210 == 7-29"- , "211 == 7-30"- , "212 == 7-31"- , "213 == 8-1"- , "214 == 8-2"- , "215 == 8-3"- , "216 == 8-4"- , "217 == 8-5"- , "218 == 8-6"- , "219 == 8-7"- , "220 == 8-8"- , "221 == 8-9"- , "222 == 8-10"- , "223 == 8-11"- , "224 == 8-12"- , "225 == 8-13"- , "226 == 8-14"- , "227 == 8-15"- , "228 == 8-16"- , "229 == 8-17"- , "230 == 8-18"- , "231 == 8-19"- , "232 == 8-20"- , "233 == 8-21"- , "234 == 8-22"- , "235 == 8-23"- , "236 == 8-24"- , "237 == 8-25"- , "238 == 8-26"- , "239 == 8-27"- , "240 == 8-28"- , "241 == 8-29"- , "242 == 8-30"- , "243 == 8-31"- , "244 == 9-1"- , "245 == 9-2"- , "246 == 9-3"- , "247 == 9-4"- , "248 == 9-5"- , "249 == 9-6"- , "250 == 9-7"- , "251 == 9-8"- , "252 == 9-9"- , "253 == 9-10"- , "254 == 9-11"- , "255 == 9-12"- , "256 == 9-13"- , "257 == 9-14"- , "258 == 9-15"- , "259 == 9-16"- , "260 == 9-17"- , "261 == 9-18"- , "262 == 9-19"- , "263 == 9-20"- , "264 == 9-21"- , "265 == 9-22"- , "266 == 9-23"- , "267 == 9-24"- , "268 == 9-25"- , "269 == 9-26"- , "270 == 9-27"- , "271 == 9-28"- , "272 == 9-29"- , "273 == 9-30"- , "274 == 10-1"- , "275 == 10-2"- , "276 == 10-3"- , "277 == 10-4"- , "278 == 10-5"- , "279 == 10-6"- , "280 == 10-7"- , "281 == 10-8"- , "282 == 10-9"- , "283 == 10-10"- , "284 == 10-11"- , "285 == 10-12"- , "286 == 10-13"- , "287 == 10-14"- , "288 == 10-15"- , "289 == 10-16"- , "290 == 10-17"- , "291 == 10-18"- , "292 == 10-19"- , "293 == 10-20"- , "294 == 10-21"- , "295 == 10-22"- , "296 == 10-23"- , "297 == 10-24"- , "298 == 10-25"- , "299 == 10-26"- , "300 == 10-27"- , "301 == 10-28"- , "302 == 10-29"- , "303 == 10-30"- , "304 == 10-31"- , "305 == 11-1"- , "306 == 11-2"- , "307 == 11-3"- , "308 == 11-4"- , "309 == 11-5"- , "310 == 11-6"- , "311 == 11-7"- , "312 == 11-8"- , "313 == 11-9"- , "314 == 11-10"- , "315 == 11-11"- , "316 == 11-12"- , "317 == 11-13"- , "318 == 11-14"- , "319 == 11-15"- , "320 == 11-16"- , "321 == 11-17"- , "322 == 11-18"- , "323 == 11-19"- , "324 == 11-20"- , "325 == 11-21"- , "326 == 11-22"- , "327 == 11-23"- , "328 == 11-24"- , "329 == 11-25"- , "330 == 11-26"- , "331 == 11-27"- , "332 == 11-28"- , "333 == 11-29"- , "334 == 11-30"- , "335 == 12-1"- , "336 == 12-2"- , "337 == 12-3"- , "338 == 12-4"- , "339 == 12-5"- , "340 == 12-6"- , "341 == 12-7"- , "342 == 12-8"- , "343 == 12-9"- , "344 == 12-10"- , "345 == 12-11"- , "346 == 12-12"- , "347 == 12-13"- , "348 == 12-14"- , "349 == 12-15"- , "350 == 12-16"- , "351 == 12-17"- , "352 == 12-18"- , "353 == 12-19"- , "354 == 12-20"- , "355 == 12-21"- , "356 == 12-22"- , "357 == 12-23"- , "358 == 12-24"- , "359 == 12-25"- , "360 == 12-26"- , "361 == 12-27"- , "362 == 12-28"- , "363 == 12-29"- , "364 == 12-30"- , "365 == 12-31"- , "DIFF: 366 -> 12-31 -> 365"- , "DIFF: 367 -> 12-31 -> 365"- , "DIFF: 368 -> 12-31 -> 365"- , "DIFF: 369 -> 12-31 -> 365"- , "Leap:"- , "DIFF: -2 -> 1-1 -> 1"- , "DIFF: -1 -> 1-1 -> 1"- , "DIFF: 0 -> 1-1 -> 1"- , "1 == 1-1"- , "2 == 1-2"- , "3 == 1-3"- , "4 == 1-4"- , "5 == 1-5"- , "6 == 1-6"- , "7 == 1-7"- , "8 == 1-8"- , "9 == 1-9"- , "10 == 1-10"- , "11 == 1-11"- , "12 == 1-12"- , "13 == 1-13"- , "14 == 1-14"- , "15 == 1-15"- , "16 == 1-16"- , "17 == 1-17"- , "18 == 1-18"- , "19 == 1-19"- , "20 == 1-20"- , "21 == 1-21"- , "22 == 1-22"- , "23 == 1-23"- , "24 == 1-24"- , "25 == 1-25"- , "26 == 1-26"- , "27 == 1-27"- , "28 == 1-28"- , "29 == 1-29"- , "30 == 1-30"- , "31 == 1-31"- , "32 == 2-1"- , "33 == 2-2"- , "34 == 2-3"- , "35 == 2-4"- , "36 == 2-5"- , "37 == 2-6"- , "38 == 2-7"- , "39 == 2-8"- , "40 == 2-9"- , "41 == 2-10"- , "42 == 2-11"- , "43 == 2-12"- , "44 == 2-13"- , "45 == 2-14"- , "46 == 2-15"- , "47 == 2-16"- , "48 == 2-17"- , "49 == 2-18"- , "50 == 2-19"- , "51 == 2-20"- , "52 == 2-21"- , "53 == 2-22"- , "54 == 2-23"- , "55 == 2-24"- , "56 == 2-25"- , "57 == 2-26"- , "58 == 2-27"- , "59 == 2-28"- , "60 == 2-29"- , "61 == 3-1"- , "62 == 3-2"- , "63 == 3-3"- , "64 == 3-4"- , "65 == 3-5"- , "66 == 3-6"- , "67 == 3-7"- , "68 == 3-8"- , "69 == 3-9"- , "70 == 3-10"- , "71 == 3-11"- , "72 == 3-12"- , "73 == 3-13"- , "74 == 3-14"- , "75 == 3-15"- , "76 == 3-16"- , "77 == 3-17"- , "78 == 3-18"- , "79 == 3-19"- , "80 == 3-20"- , "81 == 3-21"- , "82 == 3-22"- , "83 == 3-23"- , "84 == 3-24"- , "85 == 3-25"- , "86 == 3-26"- , "87 == 3-27"- , "88 == 3-28"- , "89 == 3-29"- , "90 == 3-30"- , "91 == 3-31"- , "92 == 4-1"- , "93 == 4-2"- , "94 == 4-3"- , "95 == 4-4"- , "96 == 4-5"- , "97 == 4-6"- , "98 == 4-7"- , "99 == 4-8"- , "100 == 4-9"- , "101 == 4-10"- , "102 == 4-11"- , "103 == 4-12"- , "104 == 4-13"- , "105 == 4-14"- , "106 == 4-15"- , "107 == 4-16"- , "108 == 4-17"- , "109 == 4-18"- , "110 == 4-19"- , "111 == 4-20"- , "112 == 4-21"- , "113 == 4-22"- , "114 == 4-23"- , "115 == 4-24"- , "116 == 4-25"- , "117 == 4-26"- , "118 == 4-27"- , "119 == 4-28"- , "120 == 4-29"- , "121 == 4-30"- , "122 == 5-1"- , "123 == 5-2"- , "124 == 5-3"- , "125 == 5-4"- , "126 == 5-5"- , "127 == 5-6"- , "128 == 5-7"- , "129 == 5-8"- , "130 == 5-9"- , "131 == 5-10"- , "132 == 5-11"- , "133 == 5-12"- , "134 == 5-13"- , "135 == 5-14"- , "136 == 5-15"- , "137 == 5-16"- , "138 == 5-17"- , "139 == 5-18"- , "140 == 5-19"- , "141 == 5-20"- , "142 == 5-21"- , "143 == 5-22"- , "144 == 5-23"- , "145 == 5-24"- , "146 == 5-25"- , "147 == 5-26"- , "148 == 5-27"- , "149 == 5-28"- , "150 == 5-29"- , "151 == 5-30"- , "152 == 5-31"- , "153 == 6-1"- , "154 == 6-2"- , "155 == 6-3"- , "156 == 6-4"- , "157 == 6-5"- , "158 == 6-6"- , "159 == 6-7"- , "160 == 6-8"- , "161 == 6-9"- , "162 == 6-10"- , "163 == 6-11"- , "164 == 6-12"- , "165 == 6-13"- , "166 == 6-14"- , "167 == 6-15"- , "168 == 6-16"- , "169 == 6-17"- , "170 == 6-18"- , "171 == 6-19"- , "172 == 6-20"- , "173 == 6-21"- , "174 == 6-22"- , "175 == 6-23"- , "176 == 6-24"- , "177 == 6-25"- , "178 == 6-26"- , "179 == 6-27"- , "180 == 6-28"- , "181 == 6-29"- , "182 == 6-30"- , "183 == 7-1"- , "184 == 7-2"- , "185 == 7-3"- , "186 == 7-4"- , "187 == 7-5"- , "188 == 7-6"- , "189 == 7-7"- , "190 == 7-8"- , "191 == 7-9"- , "192 == 7-10"- , "193 == 7-11"- , "194 == 7-12"- , "195 == 7-13"- , "196 == 7-14"- , "197 == 7-15"- , "198 == 7-16"- , "199 == 7-17"- , "200 == 7-18"- , "201 == 7-19"- , "202 == 7-20"- , "203 == 7-21"- , "204 == 7-22"- , "205 == 7-23"- , "206 == 7-24"- , "207 == 7-25"- , "208 == 7-26"- , "209 == 7-27"- , "210 == 7-28"- , "211 == 7-29"- , "212 == 7-30"- , "213 == 7-31"- , "214 == 8-1"- , "215 == 8-2"- , "216 == 8-3"- , "217 == 8-4"- , "218 == 8-5"- , "219 == 8-6"- , "220 == 8-7"- , "221 == 8-8"- , "222 == 8-9"- , "223 == 8-10"- , "224 == 8-11"- , "225 == 8-12"- , "226 == 8-13"- , "227 == 8-14"- , "228 == 8-15"- , "229 == 8-16"- , "230 == 8-17"- , "231 == 8-18"- , "232 == 8-19"- , "233 == 8-20"- , "234 == 8-21"- , "235 == 8-22"- , "236 == 8-23"- , "237 == 8-24"- , "238 == 8-25"- , "239 == 8-26"- , "240 == 8-27"- , "241 == 8-28"- , "242 == 8-29"- , "243 == 8-30"- , "244 == 8-31"- , "245 == 9-1"- , "246 == 9-2"- , "247 == 9-3"- , "248 == 9-4"- , "249 == 9-5"- , "250 == 9-6"- , "251 == 9-7"- , "252 == 9-8"- , "253 == 9-9"- , "254 == 9-10"- , "255 == 9-11"- , "256 == 9-12"- , "257 == 9-13"- , "258 == 9-14"- , "259 == 9-15"- , "260 == 9-16"- , "261 == 9-17"- , "262 == 9-18"- , "263 == 9-19"- , "264 == 9-20"- , "265 == 9-21"- , "266 == 9-22"- , "267 == 9-23"- , "268 == 9-24"- , "269 == 9-25"- , "270 == 9-26"- , "271 == 9-27"- , "272 == 9-28"- , "273 == 9-29"- , "274 == 9-30"- , "275 == 10-1"- , "276 == 10-2"- , "277 == 10-3"- , "278 == 10-4"- , "279 == 10-5"- , "280 == 10-6"- , "281 == 10-7"- , "282 == 10-8"- , "283 == 10-9"- , "284 == 10-10"- , "285 == 10-11"- , "286 == 10-12"- , "287 == 10-13"- , "288 == 10-14"- , "289 == 10-15"- , "290 == 10-16"- , "291 == 10-17"- , "292 == 10-18"- , "293 == 10-19"- , "294 == 10-20"- , "295 == 10-21"- , "296 == 10-22"- , "297 == 10-23"- , "298 == 10-24"- , "299 == 10-25"- , "300 == 10-26"- , "301 == 10-27"- , "302 == 10-28"- , "303 == 10-29"- , "304 == 10-30"- , "305 == 10-31"- , "306 == 11-1"- , "307 == 11-2"- , "308 == 11-3"- , "309 == 11-4"- , "310 == 11-5"- , "311 == 11-6"- , "312 == 11-7"- , "313 == 11-8"- , "314 == 11-9"- , "315 == 11-10"- , "316 == 11-11"- , "317 == 11-12"- , "318 == 11-13"- , "319 == 11-14"- , "320 == 11-15"- , "321 == 11-16"- , "322 == 11-17"- , "323 == 11-18"- , "324 == 11-19"- , "325 == 11-20"- , "326 == 11-21"- , "327 == 11-22"- , "328 == 11-23"- , "329 == 11-24"- , "330 == 11-25"- , "331 == 11-26"- , "332 == 11-27"- , "333 == 11-28"- , "334 == 11-29"- , "335 == 11-30"- , "336 == 12-1"- , "337 == 12-2"- , "338 == 12-3"- , "339 == 12-4"- , "340 == 12-5"- , "341 == 12-6"- , "342 == 12-7"- , "343 == 12-8"- , "344 == 12-9"- , "345 == 12-10"- , "346 == 12-11"- , "347 == 12-12"- , "348 == 12-13"- , "349 == 12-14"- , "350 == 12-15"- , "351 == 12-16"- , "352 == 12-17"- , "353 == 12-18"- , "354 == 12-19"- , "355 == 12-20"- , "356 == 12-21"- , "357 == 12-22"- , "358 == 12-23"- , "359 == 12-24"- , "360 == 12-25"- , "361 == 12-26"- , "362 == 12-27"- , "363 == 12-28"- , "364 == 12-29"- , "365 == 12-30"- , "366 == 12-31"- , "DIFF: 367 -> 12-31 -> 366"- , "DIFF: 368 -> 12-31 -> 366"- , "DIFF: 369 -> 12-31 -> 366"- ]+ unlines+ [ "Regular:",+ "DIFF: -2 -> 1-1 -> 1",+ "DIFF: -1 -> 1-1 -> 1",+ "DIFF: 0 -> 1-1 -> 1",+ "1 == 1-1",+ "2 == 1-2",+ "3 == 1-3",+ "4 == 1-4",+ "5 == 1-5",+ "6 == 1-6",+ "7 == 1-7",+ "8 == 1-8",+ "9 == 1-9",+ "10 == 1-10",+ "11 == 1-11",+ "12 == 1-12",+ "13 == 1-13",+ "14 == 1-14",+ "15 == 1-15",+ "16 == 1-16",+ "17 == 1-17",+ "18 == 1-18",+ "19 == 1-19",+ "20 == 1-20",+ "21 == 1-21",+ "22 == 1-22",+ "23 == 1-23",+ "24 == 1-24",+ "25 == 1-25",+ "26 == 1-26",+ "27 == 1-27",+ "28 == 1-28",+ "29 == 1-29",+ "30 == 1-30",+ "31 == 1-31",+ "32 == 2-1",+ "33 == 2-2",+ "34 == 2-3",+ "35 == 2-4",+ "36 == 2-5",+ "37 == 2-6",+ "38 == 2-7",+ "39 == 2-8",+ "40 == 2-9",+ "41 == 2-10",+ "42 == 2-11",+ "43 == 2-12",+ "44 == 2-13",+ "45 == 2-14",+ "46 == 2-15",+ "47 == 2-16",+ "48 == 2-17",+ "49 == 2-18",+ "50 == 2-19",+ "51 == 2-20",+ "52 == 2-21",+ "53 == 2-22",+ "54 == 2-23",+ "55 == 2-24",+ "56 == 2-25",+ "57 == 2-26",+ "58 == 2-27",+ "59 == 2-28",+ "60 == 3-1",+ "61 == 3-2",+ "62 == 3-3",+ "63 == 3-4",+ "64 == 3-5",+ "65 == 3-6",+ "66 == 3-7",+ "67 == 3-8",+ "68 == 3-9",+ "69 == 3-10",+ "70 == 3-11",+ "71 == 3-12",+ "72 == 3-13",+ "73 == 3-14",+ "74 == 3-15",+ "75 == 3-16",+ "76 == 3-17",+ "77 == 3-18",+ "78 == 3-19",+ "79 == 3-20",+ "80 == 3-21",+ "81 == 3-22",+ "82 == 3-23",+ "83 == 3-24",+ "84 == 3-25",+ "85 == 3-26",+ "86 == 3-27",+ "87 == 3-28",+ "88 == 3-29",+ "89 == 3-30",+ "90 == 3-31",+ "91 == 4-1",+ "92 == 4-2",+ "93 == 4-3",+ "94 == 4-4",+ "95 == 4-5",+ "96 == 4-6",+ "97 == 4-7",+ "98 == 4-8",+ "99 == 4-9",+ "100 == 4-10",+ "101 == 4-11",+ "102 == 4-12",+ "103 == 4-13",+ "104 == 4-14",+ "105 == 4-15",+ "106 == 4-16",+ "107 == 4-17",+ "108 == 4-18",+ "109 == 4-19",+ "110 == 4-20",+ "111 == 4-21",+ "112 == 4-22",+ "113 == 4-23",+ "114 == 4-24",+ "115 == 4-25",+ "116 == 4-26",+ "117 == 4-27",+ "118 == 4-28",+ "119 == 4-29",+ "120 == 4-30",+ "121 == 5-1",+ "122 == 5-2",+ "123 == 5-3",+ "124 == 5-4",+ "125 == 5-5",+ "126 == 5-6",+ "127 == 5-7",+ "128 == 5-8",+ "129 == 5-9",+ "130 == 5-10",+ "131 == 5-11",+ "132 == 5-12",+ "133 == 5-13",+ "134 == 5-14",+ "135 == 5-15",+ "136 == 5-16",+ "137 == 5-17",+ "138 == 5-18",+ "139 == 5-19",+ "140 == 5-20",+ "141 == 5-21",+ "142 == 5-22",+ "143 == 5-23",+ "144 == 5-24",+ "145 == 5-25",+ "146 == 5-26",+ "147 == 5-27",+ "148 == 5-28",+ "149 == 5-29",+ "150 == 5-30",+ "151 == 5-31",+ "152 == 6-1",+ "153 == 6-2",+ "154 == 6-3",+ "155 == 6-4",+ "156 == 6-5",+ "157 == 6-6",+ "158 == 6-7",+ "159 == 6-8",+ "160 == 6-9",+ "161 == 6-10",+ "162 == 6-11",+ "163 == 6-12",+ "164 == 6-13",+ "165 == 6-14",+ "166 == 6-15",+ "167 == 6-16",+ "168 == 6-17",+ "169 == 6-18",+ "170 == 6-19",+ "171 == 6-20",+ "172 == 6-21",+ "173 == 6-22",+ "174 == 6-23",+ "175 == 6-24",+ "176 == 6-25",+ "177 == 6-26",+ "178 == 6-27",+ "179 == 6-28",+ "180 == 6-29",+ "181 == 6-30",+ "182 == 7-1",+ "183 == 7-2",+ "184 == 7-3",+ "185 == 7-4",+ "186 == 7-5",+ "187 == 7-6",+ "188 == 7-7",+ "189 == 7-8",+ "190 == 7-9",+ "191 == 7-10",+ "192 == 7-11",+ "193 == 7-12",+ "194 == 7-13",+ "195 == 7-14",+ "196 == 7-15",+ "197 == 7-16",+ "198 == 7-17",+ "199 == 7-18",+ "200 == 7-19",+ "201 == 7-20",+ "202 == 7-21",+ "203 == 7-22",+ "204 == 7-23",+ "205 == 7-24",+ "206 == 7-25",+ "207 == 7-26",+ "208 == 7-27",+ "209 == 7-28",+ "210 == 7-29",+ "211 == 7-30",+ "212 == 7-31",+ "213 == 8-1",+ "214 == 8-2",+ "215 == 8-3",+ "216 == 8-4",+ "217 == 8-5",+ "218 == 8-6",+ "219 == 8-7",+ "220 == 8-8",+ "221 == 8-9",+ "222 == 8-10",+ "223 == 8-11",+ "224 == 8-12",+ "225 == 8-13",+ "226 == 8-14",+ "227 == 8-15",+ "228 == 8-16",+ "229 == 8-17",+ "230 == 8-18",+ "231 == 8-19",+ "232 == 8-20",+ "233 == 8-21",+ "234 == 8-22",+ "235 == 8-23",+ "236 == 8-24",+ "237 == 8-25",+ "238 == 8-26",+ "239 == 8-27",+ "240 == 8-28",+ "241 == 8-29",+ "242 == 8-30",+ "243 == 8-31",+ "244 == 9-1",+ "245 == 9-2",+ "246 == 9-3",+ "247 == 9-4",+ "248 == 9-5",+ "249 == 9-6",+ "250 == 9-7",+ "251 == 9-8",+ "252 == 9-9",+ "253 == 9-10",+ "254 == 9-11",+ "255 == 9-12",+ "256 == 9-13",+ "257 == 9-14",+ "258 == 9-15",+ "259 == 9-16",+ "260 == 9-17",+ "261 == 9-18",+ "262 == 9-19",+ "263 == 9-20",+ "264 == 9-21",+ "265 == 9-22",+ "266 == 9-23",+ "267 == 9-24",+ "268 == 9-25",+ "269 == 9-26",+ "270 == 9-27",+ "271 == 9-28",+ "272 == 9-29",+ "273 == 9-30",+ "274 == 10-1",+ "275 == 10-2",+ "276 == 10-3",+ "277 == 10-4",+ "278 == 10-5",+ "279 == 10-6",+ "280 == 10-7",+ "281 == 10-8",+ "282 == 10-9",+ "283 == 10-10",+ "284 == 10-11",+ "285 == 10-12",+ "286 == 10-13",+ "287 == 10-14",+ "288 == 10-15",+ "289 == 10-16",+ "290 == 10-17",+ "291 == 10-18",+ "292 == 10-19",+ "293 == 10-20",+ "294 == 10-21",+ "295 == 10-22",+ "296 == 10-23",+ "297 == 10-24",+ "298 == 10-25",+ "299 == 10-26",+ "300 == 10-27",+ "301 == 10-28",+ "302 == 10-29",+ "303 == 10-30",+ "304 == 10-31",+ "305 == 11-1",+ "306 == 11-2",+ "307 == 11-3",+ "308 == 11-4",+ "309 == 11-5",+ "310 == 11-6",+ "311 == 11-7",+ "312 == 11-8",+ "313 == 11-9",+ "314 == 11-10",+ "315 == 11-11",+ "316 == 11-12",+ "317 == 11-13",+ "318 == 11-14",+ "319 == 11-15",+ "320 == 11-16",+ "321 == 11-17",+ "322 == 11-18",+ "323 == 11-19",+ "324 == 11-20",+ "325 == 11-21",+ "326 == 11-22",+ "327 == 11-23",+ "328 == 11-24",+ "329 == 11-25",+ "330 == 11-26",+ "331 == 11-27",+ "332 == 11-28",+ "333 == 11-29",+ "334 == 11-30",+ "335 == 12-1",+ "336 == 12-2",+ "337 == 12-3",+ "338 == 12-4",+ "339 == 12-5",+ "340 == 12-6",+ "341 == 12-7",+ "342 == 12-8",+ "343 == 12-9",+ "344 == 12-10",+ "345 == 12-11",+ "346 == 12-12",+ "347 == 12-13",+ "348 == 12-14",+ "349 == 12-15",+ "350 == 12-16",+ "351 == 12-17",+ "352 == 12-18",+ "353 == 12-19",+ "354 == 12-20",+ "355 == 12-21",+ "356 == 12-22",+ "357 == 12-23",+ "358 == 12-24",+ "359 == 12-25",+ "360 == 12-26",+ "361 == 12-27",+ "362 == 12-28",+ "363 == 12-29",+ "364 == 12-30",+ "365 == 12-31",+ "DIFF: 366 -> 12-31 -> 365",+ "DIFF: 367 -> 12-31 -> 365",+ "DIFF: 368 -> 12-31 -> 365",+ "DIFF: 369 -> 12-31 -> 365",+ "Leap:",+ "DIFF: -2 -> 1-1 -> 1",+ "DIFF: -1 -> 1-1 -> 1",+ "DIFF: 0 -> 1-1 -> 1",+ "1 == 1-1",+ "2 == 1-2",+ "3 == 1-3",+ "4 == 1-4",+ "5 == 1-5",+ "6 == 1-6",+ "7 == 1-7",+ "8 == 1-8",+ "9 == 1-9",+ "10 == 1-10",+ "11 == 1-11",+ "12 == 1-12",+ "13 == 1-13",+ "14 == 1-14",+ "15 == 1-15",+ "16 == 1-16",+ "17 == 1-17",+ "18 == 1-18",+ "19 == 1-19",+ "20 == 1-20",+ "21 == 1-21",+ "22 == 1-22",+ "23 == 1-23",+ "24 == 1-24",+ "25 == 1-25",+ "26 == 1-26",+ "27 == 1-27",+ "28 == 1-28",+ "29 == 1-29",+ "30 == 1-30",+ "31 == 1-31",+ "32 == 2-1",+ "33 == 2-2",+ "34 == 2-3",+ "35 == 2-4",+ "36 == 2-5",+ "37 == 2-6",+ "38 == 2-7",+ "39 == 2-8",+ "40 == 2-9",+ "41 == 2-10",+ "42 == 2-11",+ "43 == 2-12",+ "44 == 2-13",+ "45 == 2-14",+ "46 == 2-15",+ "47 == 2-16",+ "48 == 2-17",+ "49 == 2-18",+ "50 == 2-19",+ "51 == 2-20",+ "52 == 2-21",+ "53 == 2-22",+ "54 == 2-23",+ "55 == 2-24",+ "56 == 2-25",+ "57 == 2-26",+ "58 == 2-27",+ "59 == 2-28",+ "60 == 2-29",+ "61 == 3-1",+ "62 == 3-2",+ "63 == 3-3",+ "64 == 3-4",+ "65 == 3-5",+ "66 == 3-6",+ "67 == 3-7",+ "68 == 3-8",+ "69 == 3-9",+ "70 == 3-10",+ "71 == 3-11",+ "72 == 3-12",+ "73 == 3-13",+ "74 == 3-14",+ "75 == 3-15",+ "76 == 3-16",+ "77 == 3-17",+ "78 == 3-18",+ "79 == 3-19",+ "80 == 3-20",+ "81 == 3-21",+ "82 == 3-22",+ "83 == 3-23",+ "84 == 3-24",+ "85 == 3-25",+ "86 == 3-26",+ "87 == 3-27",+ "88 == 3-28",+ "89 == 3-29",+ "90 == 3-30",+ "91 == 3-31",+ "92 == 4-1",+ "93 == 4-2",+ "94 == 4-3",+ "95 == 4-4",+ "96 == 4-5",+ "97 == 4-6",+ "98 == 4-7",+ "99 == 4-8",+ "100 == 4-9",+ "101 == 4-10",+ "102 == 4-11",+ "103 == 4-12",+ "104 == 4-13",+ "105 == 4-14",+ "106 == 4-15",+ "107 == 4-16",+ "108 == 4-17",+ "109 == 4-18",+ "110 == 4-19",+ "111 == 4-20",+ "112 == 4-21",+ "113 == 4-22",+ "114 == 4-23",+ "115 == 4-24",+ "116 == 4-25",+ "117 == 4-26",+ "118 == 4-27",+ "119 == 4-28",+ "120 == 4-29",+ "121 == 4-30",+ "122 == 5-1",+ "123 == 5-2",+ "124 == 5-3",+ "125 == 5-4",+ "126 == 5-5",+ "127 == 5-6",+ "128 == 5-7",+ "129 == 5-8",+ "130 == 5-9",+ "131 == 5-10",+ "132 == 5-11",+ "133 == 5-12",+ "134 == 5-13",+ "135 == 5-14",+ "136 == 5-15",+ "137 == 5-16",+ "138 == 5-17",+ "139 == 5-18",+ "140 == 5-19",+ "141 == 5-20",+ "142 == 5-21",+ "143 == 5-22",+ "144 == 5-23",+ "145 == 5-24",+ "146 == 5-25",+ "147 == 5-26",+ "148 == 5-27",+ "149 == 5-28",+ "150 == 5-29",+ "151 == 5-30",+ "152 == 5-31",+ "153 == 6-1",+ "154 == 6-2",+ "155 == 6-3",+ "156 == 6-4",+ "157 == 6-5",+ "158 == 6-6",+ "159 == 6-7",+ "160 == 6-8",+ "161 == 6-9",+ "162 == 6-10",+ "163 == 6-11",+ "164 == 6-12",+ "165 == 6-13",+ "166 == 6-14",+ "167 == 6-15",+ "168 == 6-16",+ "169 == 6-17",+ "170 == 6-18",+ "171 == 6-19",+ "172 == 6-20",+ "173 == 6-21",+ "174 == 6-22",+ "175 == 6-23",+ "176 == 6-24",+ "177 == 6-25",+ "178 == 6-26",+ "179 == 6-27",+ "180 == 6-28",+ "181 == 6-29",+ "182 == 6-30",+ "183 == 7-1",+ "184 == 7-2",+ "185 == 7-3",+ "186 == 7-4",+ "187 == 7-5",+ "188 == 7-6",+ "189 == 7-7",+ "190 == 7-8",+ "191 == 7-9",+ "192 == 7-10",+ "193 == 7-11",+ "194 == 7-12",+ "195 == 7-13",+ "196 == 7-14",+ "197 == 7-15",+ "198 == 7-16",+ "199 == 7-17",+ "200 == 7-18",+ "201 == 7-19",+ "202 == 7-20",+ "203 == 7-21",+ "204 == 7-22",+ "205 == 7-23",+ "206 == 7-24",+ "207 == 7-25",+ "208 == 7-26",+ "209 == 7-27",+ "210 == 7-28",+ "211 == 7-29",+ "212 == 7-30",+ "213 == 7-31",+ "214 == 8-1",+ "215 == 8-2",+ "216 == 8-3",+ "217 == 8-4",+ "218 == 8-5",+ "219 == 8-6",+ "220 == 8-7",+ "221 == 8-8",+ "222 == 8-9",+ "223 == 8-10",+ "224 == 8-11",+ "225 == 8-12",+ "226 == 8-13",+ "227 == 8-14",+ "228 == 8-15",+ "229 == 8-16",+ "230 == 8-17",+ "231 == 8-18",+ "232 == 8-19",+ "233 == 8-20",+ "234 == 8-21",+ "235 == 8-22",+ "236 == 8-23",+ "237 == 8-24",+ "238 == 8-25",+ "239 == 8-26",+ "240 == 8-27",+ "241 == 8-28",+ "242 == 8-29",+ "243 == 8-30",+ "244 == 8-31",+ "245 == 9-1",+ "246 == 9-2",+ "247 == 9-3",+ "248 == 9-4",+ "249 == 9-5",+ "250 == 9-6",+ "251 == 9-7",+ "252 == 9-8",+ "253 == 9-9",+ "254 == 9-10",+ "255 == 9-11",+ "256 == 9-12",+ "257 == 9-13",+ "258 == 9-14",+ "259 == 9-15",+ "260 == 9-16",+ "261 == 9-17",+ "262 == 9-18",+ "263 == 9-19",+ "264 == 9-20",+ "265 == 9-21",+ "266 == 9-22",+ "267 == 9-23",+ "268 == 9-24",+ "269 == 9-25",+ "270 == 9-26",+ "271 == 9-27",+ "272 == 9-28",+ "273 == 9-29",+ "274 == 9-30",+ "275 == 10-1",+ "276 == 10-2",+ "277 == 10-3",+ "278 == 10-4",+ "279 == 10-5",+ "280 == 10-6",+ "281 == 10-7",+ "282 == 10-8",+ "283 == 10-9",+ "284 == 10-10",+ "285 == 10-11",+ "286 == 10-12",+ "287 == 10-13",+ "288 == 10-14",+ "289 == 10-15",+ "290 == 10-16",+ "291 == 10-17",+ "292 == 10-18",+ "293 == 10-19",+ "294 == 10-20",+ "295 == 10-21",+ "296 == 10-22",+ "297 == 10-23",+ "298 == 10-24",+ "299 == 10-25",+ "300 == 10-26",+ "301 == 10-27",+ "302 == 10-28",+ "303 == 10-29",+ "304 == 10-30",+ "305 == 10-31",+ "306 == 11-1",+ "307 == 11-2",+ "308 == 11-3",+ "309 == 11-4",+ "310 == 11-5",+ "311 == 11-6",+ "312 == 11-7",+ "313 == 11-8",+ "314 == 11-9",+ "315 == 11-10",+ "316 == 11-11",+ "317 == 11-12",+ "318 == 11-13",+ "319 == 11-14",+ "320 == 11-15",+ "321 == 11-16",+ "322 == 11-17",+ "323 == 11-18",+ "324 == 11-19",+ "325 == 11-20",+ "326 == 11-21",+ "327 == 11-22",+ "328 == 11-23",+ "329 == 11-24",+ "330 == 11-25",+ "331 == 11-26",+ "332 == 11-27",+ "333 == 11-28",+ "334 == 11-29",+ "335 == 11-30",+ "336 == 12-1",+ "337 == 12-2",+ "338 == 12-3",+ "339 == 12-4",+ "340 == 12-5",+ "341 == 12-6",+ "342 == 12-7",+ "343 == 12-8",+ "344 == 12-9",+ "345 == 12-10",+ "346 == 12-11",+ "347 == 12-12",+ "348 == 12-13",+ "349 == 12-14",+ "350 == 12-15",+ "351 == 12-16",+ "352 == 12-17",+ "353 == 12-18",+ "354 == 12-19",+ "355 == 12-20",+ "356 == 12-21",+ "357 == 12-22",+ "358 == 12-23",+ "359 == 12-24",+ "360 == 12-25",+ "361 == 12-26",+ "362 == 12-27",+ "363 == 12-28",+ "364 == 12-29",+ "365 == 12-30",+ "366 == 12-31",+ "DIFF: 367 -> 12-31 -> 366",+ "DIFF: 368 -> 12-31 -> 366",+ "DIFF: 369 -> 12-31 -> 366"+ ]
test/main/Test/Calendar/MonthOfYear.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.MonthOfYear (- testMonthOfYear,-) where+module Test.Calendar.MonthOfYear+ ( testMonthOfYear,+ )+where import Data.Foldable import Data.Time.Calendar.Compat@@ -9,18 +10,18 @@ matchMonthOfYear :: MonthOfYear -> Int matchMonthOfYear m = case m of- January -> 1- February -> 2- March -> 3- April -> 4- May -> 5- June -> 6- July -> 7- August -> 8- September -> 9- October -> 10- November -> 11- December -> 12+ January -> 1+ February -> 2+ March -> 3+ April -> 4+ May -> 5+ June -> 6+ July -> 7+ August -> 8+ September -> 9+ October -> 10+ November -> 11+ December -> 12 testMonthOfYear :: TestTree testMonthOfYear = testCase "MonthOfYear" $ for_ [1 .. 12] $ \m -> assertEqual (show m) m $ matchMonthOfYear m
test/main/Test/Calendar/Valid.hs view
@@ -1,121 +1,116 @@-module Test.Calendar.Valid (- testValid,-) where+module Test.Calendar.Valid+ ( testValid,+ )+where -import Data.Time.Compat import Data.Time.Calendar.Julian.Compat import Data.Time.Calendar.OrdinalDate.Compat import Data.Time.Calendar.WeekDate.Compat+import Data.Time.Compat import Test.QuickCheck.Property import Test.Tasty import Test.Tasty.QuickCheck hiding (reason) validResult :: (Eq c, Show c, Eq t, Show t) => (s -> c) -> Bool -> (t -> c) -> (c -> t) -> (c -> Maybe t) -> s -> Result validResult sc valid toComponents fromComponents fromComponentsValid s =- let- c = sc s- mt = fromComponentsValid c- t' = fromComponents c- c' = toComponents t'- in- if valid- then case mt of- Nothing -> rejected- Just t ->- if t' /= t- then failed{reason = "'fromValid' gives " ++ show t ++ ", but 'from' gives " ++ show t'}- else- if c' /= c- then- failed- { reason =- "found valid, but converts "- ++ show c- ++ " -> "- ++ show t'- ++ " -> "- ++ show c'- }- else succeeded- else case mt of- Nothing ->- if c' /= c- then succeeded- else failed{reason = show c ++ " found invalid, but converts with " ++ show t'}- Just _ -> rejected+ let c = sc s+ mt = fromComponentsValid c+ t' = fromComponents c+ c' = toComponents t'+ in if valid+ then case mt of+ Nothing -> rejected+ Just t ->+ if t' /= t+ then failed {reason = "'fromValid' gives " ++ show t ++ ", but 'from' gives " ++ show t'}+ else+ if c' /= c+ then+ failed+ { reason =+ "found valid, but converts "+ ++ show c+ ++ " -> "+ ++ show t'+ ++ " -> "+ ++ show c'+ }+ else succeeded+ else case mt of+ Nothing ->+ if c' /= c+ then succeeded+ else failed {reason = show c ++ " found invalid, but converts with " ++ show t'}+ Just _ -> rejected validTest ::- (Arbitrary s, Show s, Eq c, Show c, Eq t, Show t) =>- String ->- (s -> c) ->- (t -> c) ->- (c -> t) ->- (c -> Maybe t) ->- TestTree+ (Arbitrary s, Show s, Eq c, Show c, Eq t, Show t) =>+ String ->+ (s -> c) ->+ (t -> c) ->+ (c -> t) ->+ (c -> Maybe t) ->+ TestTree validTest name sc toComponents fromComponents fromComponentsValid =- testGroup- name- [ testProperty "valid" $ property $ validResult sc True toComponents fromComponents fromComponentsValid- , testProperty "invalid" $ property $ validResult sc False toComponents fromComponents fromComponentsValid- ]+ testGroup+ name+ [ testProperty "valid" $ property $ validResult sc True toComponents fromComponents fromComponentsValid,+ testProperty "invalid" $ property $ validResult sc False toComponents fromComponents fromComponentsValid+ ] toSundayStartWeek :: Day -> (Integer, Int, Int) toSundayStartWeek day =- let- (y, _) = toOrdinalDate day- (w, d) = sundayStartWeek day- in- (y, w, d)+ let (y, _) = toOrdinalDate day+ (w, d) = sundayStartWeek day+ in (y, w, d) toMondayStartWeek :: Day -> (Integer, Int, Int) toMondayStartWeek day =- let- (y, _) = toOrdinalDate day- (w, d) = mondayStartWeek day- in- (y, w, d)+ let (y, _) = toOrdinalDate day+ (w, d) = mondayStartWeek day+ in (y, w, d) newtype WYear- = MkWYear Year- deriving (Eq, Show)+ = MkWYear Year+ deriving (Eq, Show) instance Arbitrary WYear where- arbitrary = fmap MkWYear $ choose (-1000, 3000)+ arbitrary = fmap MkWYear $ choose (-1000, 3000) newtype WMonthOfYear- = MkWMonthOfYear MonthOfYear- deriving (Eq, Show)+ = MkWMonthOfYear MonthOfYear+ deriving (Eq, Show) instance Arbitrary WMonthOfYear where- arbitrary = fmap MkWMonthOfYear $ choose (-5, 17)+ arbitrary = fmap MkWMonthOfYear $ choose (-5, 17) newtype WDayOfMonth- = MkWDayOfMonth DayOfMonth- deriving (Eq, Show)+ = MkWDayOfMonth DayOfMonth+ deriving (Eq, Show) instance Arbitrary WDayOfMonth where- arbitrary = fmap MkWDayOfMonth $ choose (-5, 35)+ arbitrary = fmap MkWDayOfMonth $ choose (-5, 35) newtype WDayOfYear- = MkWDayOfYear DayOfYear- deriving (Eq, Show)+ = MkWDayOfYear DayOfYear+ deriving (Eq, Show) instance Arbitrary WDayOfYear where- arbitrary = fmap MkWDayOfYear $ choose (-20, 400)+ arbitrary = fmap MkWDayOfYear $ choose (-20, 400) newtype WWeekOfYear- = MkWWeekOfYear WeekOfYear- deriving (Eq, Show)+ = MkWWeekOfYear WeekOfYear+ deriving (Eq, Show) instance Arbitrary WWeekOfYear where- arbitrary = fmap MkWWeekOfYear $ choose (-5, 60)+ arbitrary = fmap MkWWeekOfYear $ choose (-5, 60) newtype WDayOfWeek- = MkWDayOfWeek Int- deriving (Eq, Show)+ = MkWDayOfWeek Int+ deriving (Eq, Show) instance Arbitrary WDayOfWeek where- arbitrary = fmap MkWDayOfWeek $ choose (-5, 15)+ arbitrary = fmap MkWDayOfWeek $ choose (-5, 15) fromYMD :: (WYear, WMonthOfYear, WDayOfMonth) -> (Year, MonthOfYear, DayOfMonth) fromYMD (MkWYear y, MkWMonthOfYear ym, MkWDayOfMonth md) = (y, ym, md)@@ -128,37 +123,37 @@ testValid :: TestTree testValid =- testGroup- "testValid"- [ validTest- "Gregorian"- fromYMD- toGregorian- (\(y, m, d) -> fromGregorian y m d)- (\(y, m, d) -> fromGregorianValid y m d)- , validTest- "OrdinalDate"- fromYD- toOrdinalDate- (\(y, d) -> fromOrdinalDate y d)- (\(y, d) -> fromOrdinalDateValid y d)- , validTest- "WeekDate"- fromYWD- toWeekDate- (\(y, w, d) -> fromWeekDate y w d)- (\(y, w, d) -> fromWeekDateValid y w d)- , validTest- "SundayStartWeek"- fromYWD- toSundayStartWeek- (\(y, w, d) -> fromSundayStartWeek y w d)- (\(y, w, d) -> fromSundayStartWeekValid y w d)- , validTest- "MondayStartWeek"- fromYWD- toMondayStartWeek- (\(y, w, d) -> fromMondayStartWeek y w d)- (\(y, w, d) -> fromMondayStartWeekValid y w d)- , validTest "Julian" fromYMD toJulian (\(y, m, d) -> fromJulian y m d) (\(y, m, d) -> fromJulianValid y m d)- ]+ testGroup+ "testValid"+ [ validTest+ "Gregorian"+ fromYMD+ toGregorian+ (\(y, m, d) -> fromGregorian y m d)+ (\(y, m, d) -> fromGregorianValid y m d),+ validTest+ "OrdinalDate"+ fromYD+ toOrdinalDate+ (\(y, d) -> fromOrdinalDate y d)+ (\(y, d) -> fromOrdinalDateValid y d),+ validTest+ "WeekDate"+ fromYWD+ toWeekDate+ (\(y, w, d) -> fromWeekDate y w d)+ (\(y, w, d) -> fromWeekDateValid y w d),+ validTest+ "SundayStartWeek"+ fromYWD+ toSundayStartWeek+ (\(y, w, d) -> fromSundayStartWeek y w d)+ (\(y, w, d) -> fromSundayStartWeekValid y w d),+ validTest+ "MondayStartWeek"+ fromYWD+ toMondayStartWeek+ (\(y, w, d) -> fromMondayStartWeek y w d)+ (\(y, w, d) -> fromMondayStartWeekValid y w d),+ validTest "Julian" fromYMD toJulian (\(y, m, d) -> fromJulian y m d) (\(y, m, d) -> fromJulianValid y m d)+ ]
test/main/Test/Calendar/Week.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.Week (- testWeek,-) where+module Test.Calendar.Week+ ( testWeek,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.OrdinalDate.Compat@@ -12,12 +13,11 @@ testDay :: TestTree testDay =- nameTest "day" $ do- let- day = fromGregorian 2018 1 9- assertEqual "" (ModifiedJulianDay 58127) day- assertEqual "" (2018, 2, 2) $ toWeekDate day- assertEqual "" Tuesday $ dayOfWeek day+ nameTest "day" $ do+ let day = fromGregorian 2018 1 9+ assertEqual "" (ModifiedJulianDay 58127) day+ assertEqual "" (2018, 2, 2) $ toWeekDate day+ assertEqual "" Tuesday $ dayOfWeek day allDaysOfWeek :: [DayOfWeek] allDaysOfWeek = [Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday]@@ -33,62 +33,62 @@ testSequences :: TestTree testSequences =- nameTest- "sequence"- [ nameTest "[Monday .. Sunday]" $ assertEqual "" allDaysOfWeek [Monday .. Sunday]- , nameTest "[Wednesday .. Wednesday]" $ assertEqual "" [Wednesday] [Wednesday .. Wednesday]- , nameTest "[Sunday .. Saturday]" $- assertEqual "" [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] [Sunday .. Saturday]- , nameTest "[Thursday .. Wednesday]" $- assertEqual "" [Thursday, Friday, Saturday, Sunday, Monday, Tuesday, Wednesday] [Thursday .. Wednesday]- , nameTest "[Tuesday ..]"- $ assertEqual- ""- [ Tuesday- , Wednesday- , Thursday- , Friday- , Saturday- , Sunday- , Monday- , Tuesday- , Wednesday- , Thursday- , Friday- , Saturday- , Sunday- , Monday- , Tuesday- ]- $ take 15 [Tuesday ..]- , nameTest "[Wednesday, Tuesday ..]"- $ assertEqual- ""- [ Wednesday- , Tuesday- , Monday- , Sunday- , Saturday- , Friday- , Thursday- , Wednesday- , Tuesday- , Monday- , Sunday- , Saturday- , Friday- , Thursday- , Wednesday- ]- $ take 15 [Wednesday, Tuesday ..]- , nameTest "[Sunday, Friday ..]" $- assertEqual "" [Sunday, Friday, Wednesday, Monday, Saturday, Thursday, Tuesday, Sunday] $- take 8 [Sunday, Friday ..]- , nameTest "[Monday,Sunday .. Tuesday]" $- assertEqual "" [Monday, Sunday, Saturday, Friday, Thursday, Wednesday, Tuesday] [Monday, Sunday .. Tuesday]- , nameTest "[Thursday, Saturday .. Tuesday]" $- assertEqual "" [Thursday, Saturday, Monday, Wednesday, Friday, Sunday, Tuesday] [Thursday, Saturday .. Tuesday]- ]+ nameTest+ "sequence"+ [ nameTest "[Monday .. Sunday]" $ assertEqual "" allDaysOfWeek [Monday .. Sunday],+ nameTest "[Wednesday .. Wednesday]" $ assertEqual "" [Wednesday] [Wednesday .. Wednesday],+ nameTest "[Sunday .. Saturday]" $+ assertEqual "" [Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday] [Sunday .. Saturday],+ nameTest "[Thursday .. Wednesday]" $+ assertEqual "" [Thursday, Friday, Saturday, Sunday, Monday, Tuesday, Wednesday] [Thursday .. Wednesday],+ nameTest "[Tuesday ..]"+ $ assertEqual+ ""+ [ Tuesday,+ Wednesday,+ Thursday,+ Friday,+ Saturday,+ Sunday,+ Monday,+ Tuesday,+ Wednesday,+ Thursday,+ Friday,+ Saturday,+ Sunday,+ Monday,+ Tuesday+ ]+ $ take 15 [Tuesday ..],+ nameTest "[Wednesday, Tuesday ..]"+ $ assertEqual+ ""+ [ Wednesday,+ Tuesday,+ Monday,+ Sunday,+ Saturday,+ Friday,+ Thursday,+ Wednesday,+ Tuesday,+ Monday,+ Sunday,+ Saturday,+ Friday,+ Thursday,+ Wednesday+ ]+ $ take 15 [Wednesday, Tuesday ..],+ nameTest "[Sunday, Friday ..]" $+ assertEqual "" [Sunday, Friday, Wednesday, Monday, Saturday, Thursday, Tuesday, Sunday] $+ take 8 [Sunday, Friday ..],+ nameTest "[Monday,Sunday .. Tuesday]" $+ assertEqual "" [Monday, Sunday, Saturday, Friday, Thursday, Wednesday, Tuesday] [Monday, Sunday .. Tuesday],+ nameTest "[Thursday, Saturday .. Tuesday]" $+ assertEqual "" [Thursday, Saturday, Monday, Wednesday, Friday, Sunday, Tuesday] [Thursday, Saturday .. Tuesday]+ ] testReadShow :: TestTree testReadShow = testAllDays "read show" $ \wd -> assertEqual "" wd $ read $ show wd@@ -101,84 +101,76 @@ prop_toFromWeekCalendar :: FirstWeekType -> DayOfWeek -> Day -> Bool prop_toFromWeekCalendar wt ws d =- let- (y, wy, dw) = toWeekCalendar wt ws d- in- fromWeekCalendar wt ws y wy dw == d+ let (y, wy, dw) = toWeekCalendar wt ws d+ in fromWeekCalendar wt ws y wy dw == d prop_weekChanges :: FirstWeekType -> DayOfWeek -> Day -> Bool prop_weekChanges wt ws d =- let- (_, wy0, _) = toWeekCalendar wt ws d- (_, wy1, dw) = toWeekCalendar wt ws $ succ d- in- if dw == ws then wy0 /= wy1 else wy0 == wy1+ let (_, wy0, _) = toWeekCalendar wt ws d+ (_, wy1, dw) = toWeekCalendar wt ws $ succ d+ in if dw == ws then wy0 /= wy1 else wy0 == wy1 prop_weekYearWholeStart :: DayOfWeek -> Year -> Bool prop_weekYearWholeStart ws y =- let- d = fromWeekCalendar FirstWholeWeek ws y 1 ws- (y', dy) = toOrdinalDate d- in- y == y' && dy >= 1 && dy <= 7+ let d = fromWeekCalendar FirstWholeWeek ws y 1 ws+ (y', dy) = toOrdinalDate d+ in y == y' && dy >= 1 && dy <= 7 prop_weekYearMostStart :: DayOfWeek -> Year -> Bool prop_weekYearMostStart ws y =- let- d = fromWeekCalendar FirstMostWeek ws y 2 ws- (y', dy) = toOrdinalDate d- in- y == y' && dy >= 5 && dy <= 11+ let d = fromWeekCalendar FirstMostWeek ws y 2 ws+ (y', dy) = toOrdinalDate d+ in y == y' && dy >= 5 && dy <= 11 testDiff :: TestTree testDiff =- nameTest- "diff"- [ nameTest "Friday - Tuesday" $ assertEqual "" 3 $ dayOfWeekDiff Friday Tuesday- , nameTest "Tuesday - Friday" $ assertEqual "" 4 $ dayOfWeekDiff Tuesday Friday- , nameTest "firstDayOfWeekOnAfter_onAfter" prop_firstDayOfWeekOnAfter_onAfter- , nameTest "firstDayOfWeekOnAfter_Day" prop_firstDayOfWeekOnAfter_Day- , nameTest "toFromWeekCalendar" prop_toFromWeekCalendar- , nameTest "weekChanges" prop_weekChanges- , nameTest "weekYearWholeStart" prop_weekYearWholeStart- , nameTest "weekYearMostStart" prop_weekYearMostStart- ]+ nameTest+ "diff"+ [ nameTest "Friday - Tuesday" $ assertEqual "" 3 $ dayOfWeekDiff Friday Tuesday,+ nameTest "Tuesday - Friday" $ assertEqual "" 4 $ dayOfWeekDiff Tuesday Friday,+ nameTest "firstDayOfWeekOnAfter_onAfter" prop_firstDayOfWeekOnAfter_onAfter,+ nameTest "firstDayOfWeekOnAfter_Day" prop_firstDayOfWeekOnAfter_Day,+ nameTest "toFromWeekCalendar" prop_toFromWeekCalendar,+ nameTest "weekChanges" prop_weekChanges,+ nameTest "weekYearWholeStart" prop_weekYearWholeStart,+ nameTest "weekYearMostStart" prop_weekYearMostStart+ ] testWeekDays :: TestTree testWeekDays =- nameTest- "Week Days"- [ testGroup "weekAllDays" weekAllDaysTests- , testGroup "weekFirstDay" weekFirstDayTests- , testGroup "weekLastDay" weekLastDayTests- ]+ nameTest+ "Week Days"+ [ testGroup "weekAllDays" weekAllDaysTests,+ testGroup "weekFirstDay" weekFirstDayTests,+ testGroup "weekLastDay" weekLastDayTests+ ] weekAllDaysTests :: [TestTree] weekAllDaysTests =- [ testGroup- "Property Tests"- [ nameTest "Week have 7 days" weekHaveSevenDays- , nameTest "Day is part of the week" dayIsPartOfWeek- ]- , testGroup- "Unit Tests"- [ nameTest "FirstDay is less than Day-DayOfWeek" $- assertEqual- ""- [YearMonthDay 2023 12 31 .. YearMonthDay 2024 1 6]- (weekAllDays Sunday (YearMonthDay 2024 1 1))- , nameTest "FirstDay is equal to Day-DayOfWeek" $- assertEqual- ""- [YearMonthDay 2024 2 26 .. YearMonthDay 2024 3 3]- (weekAllDays Monday (YearMonthDay 2024 2 26))- , nameTest "FirstDay is greater than Day-DayOfWeek" $- assertEqual- ""- [YearMonthDay 2022 2 15 .. YearMonthDay 2022 2 21]- (weekAllDays Tuesday (YearMonthDay 2022 2 21))- ]- ]+ [ testGroup+ "Property Tests"+ [ nameTest "Week have 7 days" weekHaveSevenDays,+ nameTest "Day is part of the week" dayIsPartOfWeek+ ],+ testGroup+ "Unit Tests"+ [ nameTest "FirstDay is less than Day-DayOfWeek" $+ assertEqual+ ""+ [YearMonthDay 2023 12 31 .. YearMonthDay 2024 1 6]+ (weekAllDays Sunday (YearMonthDay 2024 1 1)),+ nameTest "FirstDay is equal to Day-DayOfWeek" $+ assertEqual+ ""+ [YearMonthDay 2024 2 26 .. YearMonthDay 2024 3 3]+ (weekAllDays Monday (YearMonthDay 2024 2 26)),+ nameTest "FirstDay is greater than Day-DayOfWeek" $+ assertEqual+ ""+ [YearMonthDay 2022 2 15 .. YearMonthDay 2022 2 21]+ (weekAllDays Tuesday (YearMonthDay 2022 2 21))+ ]+ ] where weekHaveSevenDays :: DayOfWeek -> Day -> Bool weekHaveSevenDays fd d = length (weekAllDays fd d) == 7@@ -188,61 +180,61 @@ weekFirstDayTests :: [TestTree] weekFirstDayTests =- [ testGroup- "Property Tests"- [ nameTest "FirsyDay matches the Day-DayOfWeek" firstDayMatchesDay- ]- , testGroup- "Unit Tests"- [ nameTest "FirstDay is less than Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 20)- (weekFirstDay Sunday (YearMonthDay 2022 2 21))- , nameTest "FirstDay is equal to Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 21)- (weekFirstDay Monday (YearMonthDay 2022 2 21))- , nameTest "FirstDay is greater than Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 15)- (weekFirstDay Tuesday (YearMonthDay 2022 2 21))- ]- ]+ [ testGroup+ "Property Tests"+ [ nameTest "FirsyDay matches the Day-DayOfWeek" firstDayMatchesDay+ ],+ testGroup+ "Unit Tests"+ [ nameTest "FirstDay is less than Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 20)+ (weekFirstDay Sunday (YearMonthDay 2022 2 21)),+ nameTest "FirstDay is equal to Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 21)+ (weekFirstDay Monday (YearMonthDay 2022 2 21)),+ nameTest "FirstDay is greater than Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 15)+ (weekFirstDay Tuesday (YearMonthDay 2022 2 21))+ ]+ ] where firstDayMatchesDay :: DayOfWeek -> Day -> Bool firstDayMatchesDay fd d = dayOfWeek (weekFirstDay fd d) == fd weekLastDayTests :: [TestTree] weekLastDayTests =- [ nameTest "FirstDay is less than Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 26)- (weekLastDay Sunday (YearMonthDay 2022 2 21))- , nameTest "FirstDay is equal to Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 27)- (weekLastDay Monday (YearMonthDay 2022 2 21))- , nameTest "FirstDay is greater than Day-DayOfWeek" $- assertEqual- ""- (YearMonthDay 2022 2 21)- (weekLastDay Tuesday (YearMonthDay 2022 2 21))- ]+ [ nameTest "FirstDay is less than Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 26)+ (weekLastDay Sunday (YearMonthDay 2022 2 21)),+ nameTest "FirstDay is equal to Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 27)+ (weekLastDay Monday (YearMonthDay 2022 2 21)),+ nameTest "FirstDay is greater than Day-DayOfWeek" $+ assertEqual+ ""+ (YearMonthDay 2022 2 21)+ (weekLastDay Tuesday (YearMonthDay 2022 2 21))+ ] testWeek :: TestTree testWeek =- nameTest- "Week"- [ testDay- , testSucc- , testPred- , testSequences- , testReadShow- , testDiff- , testWeekDays- ]+ nameTest+ "Week"+ [ testDay,+ testSucc,+ testPred,+ testSequences,+ testReadShow,+ testDiff,+ testWeekDays+ ]
test/main/Test/Calendar/Year.hs view
@@ -1,6 +1,7 @@-module Test.Calendar.Year (- testYear,-) where+module Test.Calendar.Year+ ( testYear,+ )+where import Data.Time.Calendar.Compat import Data.Time.Calendar.OrdinalDate.Compat@@ -11,19 +12,19 @@ cbRoundTrip :: TestTree cbRoundTrip = nameTest "CE-BCE" $ \(YearDay y _) -> case y of- CommonEra n -> case id y of- BeforeCommonEra _ -> False- _ -> n >= 1 && y == CommonEra n- _ -> case id y of- BeforeCommonEra n -> n >= 1 && y == BeforeCommonEra n- _ -> False+ CommonEra n -> case id y of+ BeforeCommonEra _ -> False+ _ -> n >= 1 && y == CommonEra n+ _ -> case id y of+ BeforeCommonEra n -> n >= 1 && y == BeforeCommonEra n+ _ -> False testYear :: TestTree testYear =- nameTest- "Year"- [ cbRoundTrip- , nameTest "succ 1" $ assertEqual "" (BeforeCommonEra 1) $ succ $ BeforeCommonEra 2- , nameTest "succ 2" $ assertEqual "" (CommonEra 1) $ succ $ BeforeCommonEra 1- , nameTest "succ 3" $ assertEqual "" (CommonEra 2) $ succ $ CommonEra 1- ]+ nameTest+ "Year"+ [ cbRoundTrip,+ nameTest "succ 1" $ assertEqual "" (BeforeCommonEra 1) $ succ $ BeforeCommonEra 2,+ nameTest "succ 2" $ assertEqual "" (CommonEra 1) $ succ $ BeforeCommonEra 1,+ nameTest "succ 3" $ assertEqual "" (CommonEra 2) $ succ $ CommonEra 1+ ]
test/main/Test/Clock/Conversion.hs view
@@ -1,6 +1,7 @@-module Test.Clock.Conversion (- testClockConversion,-) where+module Test.Clock.Conversion+ ( testClockConversion,+ )+where import Data.Time.Clock.Compat import Data.Time.Clock.System.Compat@@ -9,19 +10,17 @@ testClockConversion :: TestTree testClockConversion =- testGroup "clock conversion" $- let- testPair :: (SystemTime, UTCTime) -> TestTree- testPair (st, ut) =- testGroup (show ut) $- [ testCase "systemToUTCTime" $ assertEqual (show ut) ut $ systemToUTCTime st- , testCase "utcToSystemTime" $ assertEqual (show ut) st $ utcToSystemTime ut- ]- in- [ testPair (MkSystemTime 0 0, UTCTime systemEpochDay 0)- , testPair (MkSystemTime 86399 0, UTCTime systemEpochDay 86399)- , testPair (MkSystemTime 86399 999999999, UTCTime systemEpochDay 86399.999999999)- , testPair (MkSystemTime 86399 1000000000, UTCTime systemEpochDay 86400)- , testPair (MkSystemTime 86399 1999999999, UTCTime systemEpochDay 86400.999999999)- , testPair (MkSystemTime 86400 0, UTCTime (succ systemEpochDay) 0)+ testGroup "clock conversion" $+ let testPair :: (SystemTime, UTCTime) -> TestTree+ testPair (st, ut) =+ testGroup (show ut) $+ [ testCase "systemToUTCTime" $ assertEqual (show ut) ut $ systemToUTCTime st,+ testCase "utcToSystemTime" $ assertEqual (show ut) st $ utcToSystemTime ut ]+ in [ testPair (MkSystemTime 0 0, UTCTime systemEpochDay 0),+ testPair (MkSystemTime 86399 0, UTCTime systemEpochDay 86399),+ testPair (MkSystemTime 86399 999999999, UTCTime systemEpochDay 86399.999999999),+ testPair (MkSystemTime 86399 1000000000, UTCTime systemEpochDay 86400),+ testPair (MkSystemTime 86399 1999999999, UTCTime systemEpochDay 86400.999999999),+ testPair (MkSystemTime 86400 0, UTCTime (succ systemEpochDay) 0)+ ]
− test/main/Test/Clock/Lift.hs
@@ -1,18 +0,0 @@-{-# LANGUAGE TemplateHaskell #-}--module Test.Clock.Lift (- testLift,-) where--import Data.Time.Clock.Compat-import qualified Language.Haskell.TH.Syntax as TH-import Test.Tasty-import Test.Tasty.HUnit--testLift :: TestTree-testLift =- testGroup- "Lift instances"- [ testCase "DiffTime" $ $(TH.lift (secondsToDiffTime 100)) @?= secondsToDiffTime 100- , testCase "NominalDiffTime" $ $(TH.lift (secondsToNominalDiffTime 100)) @?= secondsToNominalDiffTime 100- ]
+ test/main/Test/Clock/Pattern.hs view
@@ -0,0 +1,31 @@+module Test.Clock.Pattern+ ( testClockPatterns,+ )+where++import Data.Time.Clock.Compat+import Test.Tasty+import Test.Tasty.HUnit++testClockPatterns :: TestTree+testClockPatterns =+ let testSame :: forall a. (Eq a, Show a) => TestName -> a -> a -> TestTree+ testSame name expected found = testCase name $ assertEqual "" expected found+ in testGroup "pattern" $+ [ testGroup+ "construct"+ [ testSame "Seconds" 52.4 (Seconds 52.4),+ testSame "Seconds-Picoseconds" (Picoseconds 7_276_000_000_000) (Seconds 7.276),+ testSame "Minutes-Seconds" (Seconds 210) (Minutes 3.5),+ testSame "Hours-Minutes" (Minutes 120) (Hours 2),+ testSame "Nominal" 37.4 (Nominal 37.4)+ ],+ testGroup+ "deconstruct"+ [ testSame "Seconds" 52.4 ((\(Seconds x) -> x) 52.4),+ testSame "Seconds-Picoseconds" 7.276 ((\(Seconds x) -> x) $ Picoseconds 7_276_000_000_000),+ testSame "Minutes-Seconds" 3.5 ((\(Minutes x) -> x) $ Seconds 210),+ testSame "Hours-Minutes" 2 ((\(Hours x) -> x) $ Minutes 120),+ testSame "Nominal" 37.4 ((\(Nominal x) -> x) 37.4)+ ]+ ]
test/main/Test/Clock/Resolution.hs view
@@ -1,6 +1,7 @@-module Test.Clock.Resolution (- testResolutions,-) where+module Test.Clock.Resolution+ ( testResolutions,+ )+where import Control.Concurrent import Data.Fixed@@ -9,57 +10,56 @@ import Test.Tasty import Test.Tasty.HUnit -repeatN :: Monad m => Int -> m a -> m [a]+repeatN :: (Monad m) => Int -> m a -> m [a] repeatN 0 _ = return [] repeatN n ma = do- a <- ma- aa <- repeatN (n - 1) ma- return $ a : aa+ a <- ma+ aa <- repeatN (n - 1) ma+ return $ a : aa -gcd' :: Real a => a -> a -> a+gcd' :: (Real a) => a -> a -> a gcd' a 0 = a gcd' a b = gcd' b (mod' a b) -gcdAll :: Real a => [a] -> a+gcdAll :: (Real a) => [a] -> a gcdAll = foldr gcd' 0 testResolution :: (Show dt, Real dt) => String -> (at -> at -> dt) -> (dt, IO at) -> TestTree testResolution name timeDiff (reportedRes, getTime) =- testCase name $ do- t0 <- getTime- times0 <-- repeatN 100 $ do- threadDelay 0- getTime- times1 <-- repeatN 100 $ -- 100us- do- threadDelay 1 -- 1us- getTime- times2 <-- repeatN 100 $ -- 1ms- do- threadDelay 10 -- 10us- getTime- times3 <-- repeatN 100 $ -- 10ms- do- threadDelay 100 -- 100us- getTime- times4 <-- repeatN 100 $ -- 100ms- do- threadDelay 1000 -- 1ms- getTime- let- times = fmap (\t -> timeDiff t t0) $ times0 ++ times1 ++ times2 ++ times3 ++ times4- foundGrid = gcdAll times- assertBool ("reported resolution: " <> show reportedRes <> ", found: " <> show foundGrid) $ foundGrid <= reportedRes+ testCase name $ do+ t0 <- getTime+ times0 <-+ repeatN 100 $ do+ threadDelay 0+ getTime+ times1 <-+ repeatN 100 $ -- 100us+ do+ threadDelay 1 -- 1us+ getTime+ times2 <-+ repeatN 100 $ -- 1ms+ do+ threadDelay 10 -- 10us+ getTime+ times3 <-+ repeatN 100 $ -- 10ms+ do+ threadDelay 100 -- 100us+ getTime+ times4 <-+ repeatN 100 $ -- 100ms+ do+ threadDelay 1000 -- 1ms+ getTime+ let times = fmap (\t -> timeDiff t t0) $ times0 ++ times1 ++ times2 ++ times3 ++ times4+ foundGrid = gcdAll times+ assertBool ("reported resolution: " <> show reportedRes <> ", found: " <> show foundGrid) $ foundGrid <= reportedRes testResolutions :: TestTree testResolutions =- testGroup "resolution" $- [testResolution "getCurrentTime" diffUTCTime (realToFrac getTime_resolution, getCurrentTime)]- ++ case taiClock of- Just clock -> [testResolution "taiClock" diffAbsoluteTime clock]- Nothing -> []+ testGroup "resolution" $+ [testResolution "getCurrentTime" diffUTCTime (realToFrac getTime_resolution, getCurrentTime)]+ ++ case taiClock of+ Just clock -> [testResolution "taiClock" diffAbsoluteTime clock]+ Nothing -> []
test/main/Test/Clock/TAI.hs view
@@ -1,60 +1,59 @@-module Test.Clock.TAI (- testTAI,-) where+module Test.Clock.TAI+ ( testTAI,+ )+where -import Data.Time.Compat import Data.Time.Clock.TAI.Compat+import Data.Time.Compat import Test.Tasty import Test.Tasty.HUnit import Test.TestUtil sampleLeapSecondMap :: LeapSecondMap sampleLeapSecondMap d- | d < fromGregorian 1972 1 1 = Nothing+ | d < fromGregorian 1972 1 1 = Nothing sampleLeapSecondMap d- | d < fromGregorian 1972 7 1 = Just 10+ | d < fromGregorian 1972 7 1 = Just 10 sampleLeapSecondMap d- | d < fromGregorian 1975 1 1 = Just 11+ | 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- ]+ 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 ]+ ]
test/main/Test/Format/Compile.hs view
@@ -1,18 +1,9 @@ -- Tests succeed if module compiles-{-# LANGUAGE GeneralizedNewtypeDeriving #-}--module Test.Format.Compile (--) where--{--import Data.Time.Compat--newtype WrappedUTCTime- = MkWrappedUTCTime UTCTime- deriving (FormatTime, ParseTime)+module Test.Format.Compile+ (+ )+where -newtype Wrapped t- = MkWrapped t- deriving (FormatTime, ParseTime)--}+-- broken on older GHCs or time+-- • Couldn't match representation of type: proxy t+-- with that of: proxy (Wrapped t)
test/main/Test/Format/Format.hs view
@@ -1,6 +1,7 @@-module Test.Format.Format (- testFormat,-) where+module Test.Format.Format+ ( testFormat,+ )+where import Data.Proxy import Data.Time.Compat@@ -9,12 +10,12 @@ import Test.TestUtil -- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html--- plus FgGklz+-- plus FgGklvz -- f not supported -- P not always supported -- s time-zone dependent chars :: [Char]-chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"+chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUvVwWxXyYzZ%" -- as found in "man strftime" on a glibc system. '#' is different, though modifiers :: [Char]@@ -25,33 +26,32 @@ formats :: [String] formats =- ["%G-W%V-%u", "%U-%w", "%W-%u"]- ++ (fmap (\char -> '%' : [char]) chars)- ++ ( concat $- fmap- (\char -> concat $ fmap (\width -> fmap (\modifier -> "%" ++ [modifier] ++ width ++ [char]) modifiers) widths)- chars- )+ ["%G-W%V-%u", "%U-%w", "%W-%u"]+ ++ (fmap (\char -> '%' : [char]) chars)+ ++ ( concat $+ fmap+ (\char -> concat $ fmap (\width -> fmap (\modifier -> "%" ++ [modifier] ++ width ++ [char]) modifiers) widths)+ chars+ ) somestrings :: [String] somestrings = ["", " ", "-", "\n"] compareExpected :: (Eq t, Show t, ParseTime t) => String -> String -> String -> Proxy t -> TestTree compareExpected testname fmt str proxy =- testCase testname $ do- let- found :: ParseTime t => Proxy t -> Maybe t- found _ = parseTimeM False defaultTimeLocale fmt str- assertEqual "" Nothing $ found proxy+ testCase testname $ do+ let found :: (ParseTime t) => Proxy t -> Maybe t+ found _ = parseTimeM False defaultTimeLocale fmt str+ assertEqual "" Nothing $ found proxy checkParse :: String -> String -> [TestTree] checkParse fmt str =- [ compareExpected "Day" fmt str (Proxy :: Proxy Day)- , compareExpected "TimeOfDay" fmt str (Proxy :: Proxy TimeOfDay)- , compareExpected "LocalTime" fmt str (Proxy :: Proxy LocalTime)- , compareExpected "TimeZone" fmt str (Proxy :: Proxy TimeZone)- , compareExpected "UTCTime" fmt str (Proxy :: Proxy UTCTime)- ]+ [ compareExpected "Day" fmt str (Proxy :: Proxy Day),+ compareExpected "TimeOfDay" fmt str (Proxy :: Proxy TimeOfDay),+ compareExpected "LocalTime" fmt str (Proxy :: Proxy LocalTime),+ compareExpected "TimeZone" fmt str (Proxy :: Proxy TimeZone),+ compareExpected "UTCTime" fmt str (Proxy :: Proxy UTCTime)+ ] testCheckParse :: TestTree testCheckParse = testGroup "checkParse" $ tgroup formats $ \fmt -> tgroup somestrings $ \str -> checkParse fmt str@@ -61,164 +61,86 @@ testDayOfWeek :: TestTree testDayOfWeek =- testGroup "DayOfWeek" $- tgroup "uwaA" $ \fmt ->- tgroup days $ \day ->- let- dayFormat = formatTime defaultTimeLocale ['%', fmt] day- dowFormat = formatTime defaultTimeLocale ['%', fmt] $ dayOfWeek day- in- assertEqual "" dayFormat dowFormat+ testGroup "DayOfWeek" $+ tgroup "uwaA" $ \fmt ->+ tgroup days $ \day ->+ let dayFormat = formatTime defaultTimeLocale ['%', fmt] day+ dowFormat = formatTime defaultTimeLocale ['%', fmt] $ dayOfWeek day+ in assertEqual "" dayFormat dowFormat testZone :: String -> String -> Int -> TestTree testZone fmt expected minutes =- testCase (show fmt) $ assertEqual "" expected $ formatTime defaultTimeLocale fmt $ TimeZone minutes False ""+ testCase (show fmt) $ assertEqual "" expected $ formatTime defaultTimeLocale fmt $ TimeZone minutes False "" testZonePair :: String -> String -> Int -> TestTree testZonePair mods expected minutes =- testGroup- (show mods ++ " " ++ show minutes)- [testZone ("%" ++ mods ++ "z") expected minutes, testZone ("%" ++ mods ++ "Z") expected minutes]+ testGroup+ (show mods ++ " " ++ show minutes)+ [testZone ("%" ++ mods ++ "z") expected minutes, testZone ("%" ++ mods ++ "Z") expected minutes] testTimeZone :: TestTree testTimeZone =- testGroup- "TimeZone"- [ testZonePair "" "+0000" 0- , testZonePair "E" "+00:00" 0- , testZonePair "" "+0500" 300- , testZonePair "E" "+05:00" 300- , testZonePair "3" "+0500" 300- , testZonePair "4E" "+05:00" 300- , testZonePair "4" "+0500" 300- , testZonePair "5E" "+05:00" 300- , testZonePair "5" "+00500" 300- , testZonePair "6E" "+005:00" 300- , testZonePair "" "-0700" (-420)- , testZonePair "E" "-07:00" (-420)- , testZonePair "" "+1015" 615- , testZonePair "E" "+10:15" 615- , testZonePair "3" "+1015" 615- , testZonePair "4E" "+10:15" 615- , testZonePair "4" "+1015" 615- , testZonePair "5E" "+10:15" 615- , testZonePair "5" "+01015" 615- , testZonePair "6E" "+010:15" 615- , testZonePair "" "-1130" (-690)- , testZonePair "E" "-11:30" (-690)- ]+ testGroup+ "TimeZone"+ [ testZonePair "" "+0000" 0,+ testZonePair "E" "+00:00" 0,+ testZonePair "" "+0500" 300,+ testZonePair "E" "+05:00" 300,+ testZonePair "3" "+0500" 300,+ testZonePair "4E" "+05:00" 300,+ testZonePair "4" "+0500" 300,+ testZonePair "5E" "+05:00" 300,+ testZonePair "5" "+00500" 300,+ testZonePair "6E" "+005:00" 300,+ testZonePair "" "-0700" (-420),+ testZonePair "E" "-07:00" (-420),+ testZonePair "" "+1015" 615,+ testZonePair "E" "+10:15" 615,+ testZonePair "3" "+1015" 615,+ testZonePair "4E" "+10:15" 615,+ testZonePair "4" "+1015" 615,+ testZonePair "5E" "+10:15" 615,+ testZonePair "5" "+01015" 615,+ testZonePair "6E" "+010:15" 615,+ testZonePair "" "-1130" (-690),+ testZonePair "E" "-11:30" (-690)+ ] -testAFormat :: FormatTime t => String -> String -> t -> TestTree+testAFormat :: (FormatTime t) => String -> String -> t -> TestTree testAFormat fmt expected t = testCase fmt $ assertEqual "" expected $ formatTime defaultTimeLocale fmt t testNominalDiffTime :: TestTree testNominalDiffTime =- testGroup- "NominalDiffTime"- []-{-- [ testAFormat "%ww%Dd%Hh%Mm%ESs" "3w2d2h22m8.21s" $ (fromRational $ 23 * 86400 + 8528.21 :: NominalDiffTime)- , testAFormat "%dd %hh %mm %ss %Ess" "0d 0h 0m 0s 0.74s" $ (fromRational $ 0.74 :: NominalDiffTime)- , testAFormat "%dd %hh %mm %ss %Ess" "0d 0h 0m 0s -0.74s" $ (fromRational $ negate $ 0.74 :: NominalDiffTime)- , testAFormat "%dd %hh %mm %ss %Ess %0Ess" "23d 554h 33262m 1995728s 1995728.21s 1995728.210000000000s" $- (fromRational $ 23 * 86400 + 8528.21 :: NominalDiffTime)- , testAFormat "%ww%Dd%Hh%Mm%Ss" "-3w-2d-2h-22m-8s" $- (fromRational $ negate $ 23 * 86400 + 8528.21 :: NominalDiffTime)- , testAFormat "%ww%Dd%Hh%Mm%ESs" "-3w-2d-2h-22m-8.21s" $- (fromRational $ negate $ 23 * 86400 + 8528.21 :: NominalDiffTime)- , testAFormat "%ww%Dd%Hh%Mm%Ss" "-3w-2d-2h-22m0s" $- (fromRational $ negate $ 23 * 86400 + 8520.21 :: NominalDiffTime)- , testAFormat "%ww%Dd%Hh%Mm%ESs" "-3w-2d-2h-22m-0.21s" $- (fromRational $ negate $ 23 * 86400 + 8520.21 :: NominalDiffTime)- , testAFormat "%dd %hh %mm %Ess" "-23d -554h -33262m -1995728.21s" $- (fromRational $ negate $ 23 * 86400 + 8528.21 :: NominalDiffTime)- , testAFormat "%3Es" "1.200" (1.2 :: NominalDiffTime)- , testAFormat "%3ES" "01.200" (1.2 :: NominalDiffTime)- , testAFormat "%3ES" "01.200" (61.2 :: NominalDiffTime)- , testAFormat "%3Es" "1.245" (1.24582 :: NominalDiffTime)- , testAFormat "%3ES" "01.245" (1.24582 :: NominalDiffTime)- , testAFormat "%3ES" "01.245" (61.24582 :: NominalDiffTime)- ]--}+ testGroup+ "NominalDiffTime"+ [] testDiffTime :: TestTree testDiffTime =- testGroup- "DiffTime"- []-{-- [ testAFormat "%ww%Dd%Hh%Mm%ESs" "3w2d2h22m8.21s" $ (fromRational $ 23 * 86400 + 8528.21 :: DiffTime)- , testAFormat "%dd %hh %mm %ss %Ess" "0d 0h 0m 0s 0.74s" $ (fromRational $ 0.74 :: DiffTime)- , testAFormat "%dd %hh %mm %ss %Ess" "0d 0h 0m 0s -0.74s" $ (fromRational $ negate $ 0.74 :: DiffTime)- , testAFormat "%dd %hh %mm %ss %Ess %0Ess" "23d 554h 33262m 1995728s 1995728.21s 1995728.210000000000s" $- (fromRational $ 23 * 86400 + 8528.21 :: DiffTime)- , testAFormat "%ww%Dd%Hh%Mm%Ss" "-3w-2d-2h-22m-8s" $ (fromRational $ negate $ 23 * 86400 + 8528.21 :: DiffTime)- , testAFormat "%ww%Dd%Hh%Mm%ESs" "-3w-2d-2h-22m-8.21s" $- (fromRational $ negate $ 23 * 86400 + 8528.21 :: DiffTime)- , testAFormat "%ww%Dd%Hh%Mm%Ss" "-3w-2d-2h-22m0s" $ (fromRational $ negate $ 23 * 86400 + 8520.21 :: DiffTime)- , testAFormat "%ww%Dd%Hh%Mm%ESs" "-3w-2d-2h-22m-0.21s" $- (fromRational $ negate $ 23 * 86400 + 8520.21 :: DiffTime)- , testAFormat "%dd %hh %mm %Ess" "-23d -554h -33262m -1995728.21s" $- (fromRational $ negate $ 23 * 86400 + 8528.21 :: DiffTime)- , testAFormat "%3Es" "1.200" (1.2 :: DiffTime)- , testAFormat "%3ES" "01.200" (1.2 :: DiffTime)- , testAFormat "%3ES" "01.200" (61.2 :: DiffTime)- , testAFormat "%3Es" "1.245" (1.24582 :: DiffTime)- , testAFormat "%3ES" "01.245" (1.24582 :: DiffTime)- , testAFormat "%3ES" "01.245" (61.24582 :: DiffTime)- ]--}+ testGroup+ "DiffTime"+ [] -testCalenderDiffDays :: TestTree-testCalenderDiffDays =- testGroup- "CalenderDiffDays"- []-{-- [ testAFormat "%yy%Bm%ww%Dd" "5y4m3w2d" $ CalendarDiffDays 64 23- , testAFormat "%bm %dd" "64m 23d" $ CalendarDiffDays 64 23- , testAFormat "%yy%Bm%ww%Dd" "-5y-4m-3w-2d" $ CalendarDiffDays (-64) (-23)- , testAFormat "%bm %dd" "-64m -23d" $ CalendarDiffDays (-64) (-23)- ]--}+testCalendarDiffDays :: TestTree+testCalendarDiffDays =+ testGroup+ "CalendarDiffDays"+ [] -testCalenderDiffTime :: TestTree-testCalenderDiffTime =- testGroup- "CalenderDiffTime"- []-{-- [ testAFormat "%yy%Bm%ww%Dd%Hh%Mm%Ss" "5y4m3w2d2h22m8s" $ CalendarDiffTime 64 $ 23 * 86400 + 8528.21- , testAFormat "%yy%Bm%ww%Dd%Hh%Mm%ESs" "5y4m3w2d2h22m8.21s" $ CalendarDiffTime 64 $ 23 * 86400 + 8528.21- , testAFormat "%yy%Bm%ww%Dd%Hh%Mm%0ESs" "5y4m3w2d2h22m08.210000000000s" $- CalendarDiffTime 64 $- 23 * 86400 + 8528.21- , testAFormat "%bm %dd %hh %mm %Ess" "64m 23d 554h 33262m 1995728.21s" $- CalendarDiffTime 64 $- 23 * 86400 + 8528.21- , testAFormat "%yy%Bm%ww%Dd%Hh%Mm%Ss" "-5y-4m-3w-2d-2h-22m-8s" $- CalendarDiffTime (-64) $- negate $- 23 * 86400 + 8528.21- , testAFormat "%yy%Bm%ww%Dd%Hh%Mm%ESs" "-5y-4m-3w-2d-2h-22m-8.21s" $- CalendarDiffTime (-64) $- negate $- 23 * 86400 + 8528.21- , testAFormat "%bm %dd %hh %mm %Ess" "-64m -23d -554h -33262m -1995728.21s" $- CalendarDiffTime (-64) $- negate $- 23 * 86400 + 8528.21- ]--}+testCalendarDiffTime :: TestTree+testCalendarDiffTime =+ testGroup+ "CalendarDiffTime"+ [] testFormat :: TestTree testFormat =- testGroup "testFormat" $- [ testCheckParse- , testDayOfWeek- , testTimeZone- , testNominalDiffTime- , testDiffTime- , testCalenderDiffDays- , testCalenderDiffTime- ]+ testGroup "testFormat" $+ [ testCheckParse,+ testDayOfWeek,+ testTimeZone,+ testNominalDiffTime,+ testDiffTime,+ testCalendarDiffDays,+ testCalendarDiffTime+ ]
test/main/Test/Format/ISO8601.hs view
@@ -1,14 +1,14 @@ {-# OPTIONS -fno-warn-orphans #-} -module Test.Format.ISO8601 (- testISO8601,-) where+module Test.Format.ISO8601+ ( testISO8601,+ )+where import Data.Coerce import Data.Ratio import Data.Time.Compat import Data.Time.Format.ISO8601.Compat--- import Data.Time.Format.Internal.Compat import Test.Arbitrary () import Test.QuickCheck.Property import Test.Tasty@@ -21,314 +21,332 @@ readShowProperty :: (Eq a, Show a) => (a -> Bool) -> Format a -> a -> Property readShowProperty skip _ val | skip val = property Discard readShowProperty _ fmt val =- case formatShowM fmt val of- Nothing -> property Discard- Just str ->- let- found = formatParseM fmt str- expected = Just val- in- property $- if expected == found- then succeeded- else failed{reason = show str ++ ": expected " ++ (show expected) ++ ", found " ++ (show found)}+ case formatShowM fmt val of+ Nothing -> property Discard+ Just str ->+ let found = formatParseM fmt str+ expected = Just val+ in property $+ if expected == found+ then succeeded+ else failed {reason = show str ++ ": expected " ++ (show expected) ++ ", found " ++ (show found)} class SpecialTestValues a where- -- | values that should always be tested- specialTestValues :: [a]+ testGen :: Gen a+ default testGen :: (Arbitrary a) => Gen a+ testGen = arbitrary -instance {-# OVERLAPPABLE #-} SpecialTestValues a where- specialTestValues = []+ -- | values that should always be tested+ specialTestValues :: [a]+ specialTestValues = [] +instance {-# OVERLAPPABLE #-} (Arbitrary a) => SpecialTestValues a+ instance SpecialTestValues TimeOfDay where- specialTestValues = [TimeOfDay 0 0 0, TimeOfDay 0 0 60, TimeOfDay 1 0 60, TimeOfDay 24 0 0]+ specialTestValues = [TimeOfDay 0 0 0, TimeOfDay 0 0 60, TimeOfDay 1 0 60, TimeOfDay 24 0 0] -readShowTestCheck :: (Eq a, Show a, Arbitrary a, SpecialTestValues a) => (a -> Bool) -> Format a -> [TestTree]-readShowTestCheck skip fmt = [nameTest "random" $ readShowProperty skip fmt, nameTest "special" $ fmap (\a -> nameTest (show a) $ readShowProperty skip fmt a) $ filter (not . skip) specialTestValues]+instance SpecialTestValues (Integer, Int) where+ testGen = do+ Small y <- arbitrary+ woy <- choose (-10, 120)+ pure (y, woy) -readShowTest :: (Eq a, Show a, Arbitrary a, SpecialTestValues a) => Format a -> [TestTree]+readShowTestCheck :: (Eq a, Show a, SpecialTestValues a) => (a -> Bool) -> Format a -> [TestTree]+readShowTestCheck skip fmt =+ [ nameTest "random" $ fmap (readShowProperty skip fmt) testGen,+ nameTest "special" $ fmap (\a -> nameTest (show a) $ readShowProperty skip fmt a) $ filter (not . skip) specialTestValues+ ]++readShowTest :: (Eq a, Show a, SpecialTestValues a) => Format a -> [TestTree] readShowTest = readShowTestCheck $ \_ -> False -readBoth :: NameTest t => (FormatExtension -> t) -> [TestTree]+readBoth :: (NameTest t) => (FormatExtension -> t) -> [TestTree] readBoth fmts = [nameTest "extended" $ fmts ExtendedFormat, nameTest "basic" $ fmts BasicFormat] -readShowTestsCheck :: (Eq a, Show a, Arbitrary a, SpecialTestValues a) => (a -> Bool) -> (FormatExtension -> Format a) -> [TestTree]+readShowTestsCheck :: (Eq a, Show a, SpecialTestValues a) => (a -> Bool) -> (FormatExtension -> Format a) -> [TestTree] readShowTestsCheck skip fmts = readBoth $ \fe -> readShowTestCheck skip $ fmts fe -readShowTests :: (Eq a, Show a, Arbitrary a, SpecialTestValues a) => (FormatExtension -> Format a) -> [TestTree]+readShowTests :: (Eq a, Show a, SpecialTestValues a) => (FormatExtension -> Format a) -> [TestTree] readShowTests = readShowTestsCheck $ \_ -> False -newtype Durational t = MkDurational {unDurational :: t}- deriving (Eq)+newtype Durational t = MkDurational t+ deriving (Eq) -instance Show t => Show (Durational t) where- show (MkDurational t) = show t+instance (Show t) => Show (Durational t) where+ show (MkDurational t) = show t instance Arbitrary (Durational CalendarDiffDays) where- arbitrary = do- mm <- choose (-10000, 10000)- dd <- choose (-40, 40)- return $ MkDurational $ CalendarDiffDays mm dd+ arbitrary = do+ mm <- choose (-10000, 10000)+ dd <- choose (-40, 40)+ return $ MkDurational $ CalendarDiffDays mm dd instance Arbitrary (Durational CalendarDiffTime) where- arbitrary =- let- limit = 40 * 86400- picofactor = 10 ^ (12 :: Int)- in- do- mm <- choose (-10000, 10000)- ss <- choose (negate limit * picofactor, limit * picofactor)- return $ MkDurational $ CalendarDiffTime mm $ fromRational $ ss % picofactor+ arbitrary =+ let limit = 40 * 86400+ picofactor = 10 ^ (12 :: Int)+ in do+ mm <- choose (-10000, 10000)+ ss <- choose (negate limit * picofactor, limit * picofactor)+ return $ MkDurational $ CalendarDiffTime mm $ fromRational $ ss % picofactor durationalFormat :: Format a -> Format (Durational a) durationalFormat = coerce testReadShowFormat :: TestTree testReadShowFormat =- testGroup "read-show format" []-{-+ localOption (QuickCheckTests 1000) $ nameTest- "read-show format"- []- [ nameTest "calendarFormat" $ readShowTests $ calendarFormat- , nameTest "yearMonthFormat" $ readShowTest $ yearMonthFormat- , nameTest "yearFormat" $ readShowTest $ yearFormat- , nameTest "centuryFormat" $ readShowTest $ centuryFormat- , nameTest "expandedCalendarFormat" $ readShowTests $ expandedCalendarFormat 6- , nameTest "expandedYearMonthFormat" $ readShowTest $ expandedYearMonthFormat 6- , nameTest "expandedYearFormat" $ readShowTest $ expandedYearFormat 6- , nameTest "expandedCenturyFormat" $ readShowTest $ expandedCenturyFormat 4- , nameTest "ordinalDateFormat" $ readShowTests $ ordinalDateFormat- , nameTest "expandedOrdinalDateFormat" $ readShowTests $ expandedOrdinalDateFormat 6- , nameTest "weekDateFormat" $ readShowTests $ weekDateFormat- , nameTest "yearWeekFormat" $ readShowTests $ yearWeekFormat- , nameTest "expandedWeekDateFormat" $ readShowTests $ expandedWeekDateFormat 6- , nameTest "expandedYearWeekFormat" $ readShowTests $ expandedYearWeekFormat 6- , nameTest "timeOfDayFormat" $ readShowTests $ timeOfDayFormat- , nameTest "hourMinuteFormat" $ readShowTestsCheck (\(TimeOfDay _ _ s) -> s >= 60) $ hourMinuteFormat- , nameTest "hourFormat" $ readShowTestCheck (\(TimeOfDay _ _ s) -> s >= 60) $ hourFormat- , nameTest "withTimeDesignator" $ readShowTests $ \fe -> withTimeDesignator $ timeOfDayFormat fe- , nameTest "withUTCDesignator" $ readShowTests $ \fe -> withUTCDesignator $ timeOfDayFormat fe- , nameTest "timeOffsetFormat" $ readShowTests $ timeOffsetFormat- , nameTest "timeOfDayAndOffsetFormat" $ readShowTests $ timeOfDayAndOffsetFormat- , nameTest "localTimeFormat" $- readShowTests $- \fe -> localTimeFormat (calendarFormat fe) (timeOfDayFormat fe)- , nameTest "zonedTimeFormat" $- readShowTests $- \fe -> zonedTimeFormat (calendarFormat fe) (timeOfDayFormat fe) fe- , nameTest "utcTimeFormat" $ readShowTests $ \fe -> utcTimeFormat (calendarFormat fe) (timeOfDayFormat fe)- , nameTest "dayAndTimeFormat" $- readShowTests $- \fe -> dayAndTimeFormat (calendarFormat fe) (timeOfDayFormat fe)- , nameTest "timeAndOffsetFormat" $ readShowTests $ \fe -> timeAndOffsetFormat (timeOfDayFormat fe) fe- , nameTest "durationDaysFormat" $ readShowTest $ durationDaysFormat- , nameTest "durationTimeFormat" $ readShowTest $ durationTimeFormat- , nameTest "alternativeDurationDaysFormat" $- readBoth $- \fe -> readShowTest (durationalFormat $ alternativeDurationDaysFormat fe)- , nameTest "alternativeDurationTimeFormat" $- readBoth $- \fe -> readShowTest (durationalFormat $ alternativeDurationTimeFormat fe)- , nameTest "intervalFormat" $- readShowTests $ \fe ->- intervalFormat (localTimeFormat (calendarFormat fe) (timeOfDayFormat fe)) durationTimeFormat- , nameTest "recurringIntervalFormat" $- readShowTests $ \fe ->- recurringIntervalFormat (localTimeFormat (calendarFormat fe) (timeOfDayFormat fe)) durationTimeFormat- ]--}+ "read-show format"+ [ nameTest "calendarFormat" $ readShowTests $ calendarFormat,+ nameTest "yearMonthFormat" $ readShowTest $ yearMonthFormat,+ nameTest "yearFormat" $ readShowTest $ yearFormat,+ nameTest "centuryFormat" $ readShowTest $ centuryFormat,+ nameTest "expandedCalendarFormat" $ readShowTests $ expandedCalendarFormat 6,+ nameTest "expandedYearMonthFormat" $ readShowTest $ expandedYearMonthFormat 6,+ nameTest "expandedYearFormat" $ readShowTest $ expandedYearFormat 6,+ nameTest "expandedCenturyFormat" $ readShowTest $ expandedCenturyFormat 4,+ nameTest "ordinalDateFormat" $ readShowTests $ ordinalDateFormat,+ nameTest "expandedOrdinalDateFormat" $ readShowTests $ expandedOrdinalDateFormat 6,+ nameTest "weekDateFormat" $ readShowTests $ weekDateFormat,+ nameTest "yearWeekFormat" $ readShowTests $ yearWeekFormat,+ nameTest "expandedWeekDateFormat" $ readShowTests $ expandedWeekDateFormat 6,+ nameTest "expandedYearWeekFormat" $ readShowTests $ expandedYearWeekFormat 6,+ nameTest "timeOfDayFormat" $ readShowTests $ timeOfDayFormat,+ nameTest "hourMinuteFormat" $ readShowTestsCheck (\(TimeOfDay _ _ s) -> s >= 60) $ hourMinuteFormat,+ nameTest "hourFormat" $ readShowTestCheck (\(TimeOfDay _ _ s) -> s >= 60) $ hourFormat,+ nameTest "withTimeDesignator" $ readShowTests $ \fe -> withTimeDesignator $ timeOfDayFormat fe,+ nameTest "withUTCDesignator" $ readShowTests $ \fe -> withUTCDesignator $ timeOfDayFormat fe,+ nameTest "timeOffsetFormat" $ readShowTests $ timeOffsetFormat,+ nameTest "timeOfDayAndOffsetFormat" $ readShowTests $ timeOfDayAndOffsetFormat,+ nameTest "localTimeFormat" $+ readShowTests $+ \fe -> localTimeFormat (calendarFormat fe) (timeOfDayFormat fe),+ nameTest "zonedTimeFormat" $+ readShowTests $+ \fe -> zonedTimeFormat (calendarFormat fe) (timeOfDayFormat fe) fe,+ nameTest "utcTimeFormat" $ readShowTests $ \fe -> utcTimeFormat (calendarFormat fe) (timeOfDayFormat fe),+ nameTest "dayAndTimeFormat" $+ readShowTests $+ \fe -> dayAndTimeFormat (calendarFormat fe) (timeOfDayFormat fe),+ nameTest "timeAndOffsetFormat" $ readShowTests $ \fe -> timeAndOffsetFormat (timeOfDayFormat fe) fe,+ nameTest "durationDaysFormat" $ readShowTest $ durationDaysFormat,+ nameTest "durationTimeFormat" $ readShowTest $ durationTimeFormat,+ nameTest "alternativeDurationDaysFormat" $+ readBoth $+ \fe -> readShowTest (durationalFormat $ alternativeDurationDaysFormat fe),+ nameTest "alternativeDurationTimeFormat" $+ readBoth $+ \fe -> readShowTest (durationalFormat $ alternativeDurationTimeFormat fe),+ nameTest "intervalFormat" $+ readShowTests $ \fe ->+ intervalFormat (localTimeFormat (calendarFormat fe) (timeOfDayFormat fe)) durationTimeFormat,+ nameTest "recurringIntervalFormat" $+ readShowTests $ \fe ->+ recurringIntervalFormat (localTimeFormat (calendarFormat fe) (timeOfDayFormat fe)) durationTimeFormat+ ] testShowReadFormat :: (Show t, Eq t) => String -> Format t -> String -> t -> TestTree testShowReadFormat name fmt str val =- nameTest- (name ++ ": " ++ str)- [ nameTest "show" $ assertEqual "" (Just str) $ formatShowM fmt val- , nameTest "read" $ assertEqual "" (Just val) $ formatParseM fmt str- ]+ nameTest+ (name ++ ": " ++ str)+ [ nameTest "show" $ assertEqual "" (Just str) $ formatShowM fmt val,+ nameTest "read" $ assertEqual "" (Just val) $ formatParseM fmt str+ ] testReadFormat :: (Show t, Eq t) => String -> Format t -> String -> t -> TestTree testReadFormat name fmt str val = nameTest (name ++ ": " ++ str) $ assertEqual "" (Just val) $ formatParseM fmt str testShowFormats :: TestTree testShowFormats =- testGroup "show format" []-{-- nameTest- "show format"- [ testShowReadFormat "durationDaysFormat" durationDaysFormat "P0D" $ CalendarDiffDays 0 0- , testShowReadFormat "durationDaysFormat" durationDaysFormat "P4Y" $ CalendarDiffDays 48 0- , testShowReadFormat "durationDaysFormat" durationDaysFormat "P7M" $ CalendarDiffDays 7 0- , testShowReadFormat "durationDaysFormat" durationDaysFormat "P5D" $ CalendarDiffDays 0 5- , testShowReadFormat "durationDaysFormat" durationDaysFormat "P2Y3M81D" $ CalendarDiffDays 27 81- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P0D" $ CalendarDiffTime 0 0- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P4Y" $ CalendarDiffTime 48 0- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P7M" $ CalendarDiffTime 7 0- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P5D" $ CalendarDiffTime 0 $ 5 * nominalDay- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P2Y3M81D" $ CalendarDiffTime 27 $ 81 * nominalDay- , testShowReadFormat "durationTimeFormat" durationTimeFormat "PT2H" $ CalendarDiffTime 0 $ 7200- , testShowReadFormat "durationTimeFormat" durationTimeFormat "PT3M" $ CalendarDiffTime 0 $ 180- , testShowReadFormat "durationTimeFormat" durationTimeFormat "PT12S" $ CalendarDiffTime 0 $ 12- , testShowReadFormat "durationTimeFormat" durationTimeFormat "PT1M18.77634S" $ CalendarDiffTime 0 $ 78.77634- , testShowReadFormat "durationTimeFormat" durationTimeFormat "PT2H1M18.77634S" $ CalendarDiffTime 0 $ 7278.77634- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P5DT2H1M18.77634S" $- CalendarDiffTime 0 $- 5 * nominalDay + 7278.77634- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P7Y10M5DT2H1M18.77634S" $- CalendarDiffTime 94 $- 5 * nominalDay + 7278.77634- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P7Y10MT2H1M18.77634S" $- CalendarDiffTime 94 $- 7278.77634- , testShowReadFormat "durationTimeFormat" durationTimeFormat "P8YT2H1M18.77634S" $ CalendarDiffTime 96 $ 7278.77634- , testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0001-00-00" $- CalendarDiffDays 12 0- , testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0002-03-29" $- CalendarDiffDays 27 29- , testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0561-08-29" $- CalendarDiffDays (561 * 12 + 8) 29- , testShowReadFormat- "alternativeDurationTimeFormat"- (alternativeDurationTimeFormat ExtendedFormat)- "P0000-00-01T00:00:00"- $ CalendarDiffTime 0 86400- , testShowReadFormat- "alternativeDurationTimeFormat"- (alternativeDurationTimeFormat ExtendedFormat)- "P0007-10-05T02:01:18.77634"- $ CalendarDiffTime 94- $ 5 * nominalDay + 7278.77634- , testShowReadFormat- "alternativeDurationTimeFormat"- (alternativeDurationTimeFormat ExtendedFormat)- "P4271-10-05T02:01:18.77634"- $ CalendarDiffTime (12 * 4271 + 10)- $ 5 * nominalDay + 7278.77634- , testShowReadFormat "centuryFormat" centuryFormat "02" 2- , testShowReadFormat "centuryFormat" centuryFormat "21" 21- , testShowReadFormat- "intervalFormat etc."- ( intervalFormat- (localTimeFormat (calendarFormat ExtendedFormat) (timeOfDayFormat ExtendedFormat))- durationTimeFormat- )- "2015-06-13T21:13:56/P1Y2M7DT5H33M2.34S"- ( LocalTime (fromGregorian 2015 6 13) (TimeOfDay 21 13 56)- , CalendarDiffTime 14 $ 7 * nominalDay + 5 * 3600 + 33 * 60 + 2.34- )- , testShowReadFormat- "recurringIntervalFormat etc."- ( recurringIntervalFormat- (localTimeFormat (calendarFormat ExtendedFormat) (timeOfDayFormat ExtendedFormat))- durationTimeFormat- )- "R74/2015-06-13T21:13:56/P1Y2M7DT5H33M2.34S"- ( 74- , LocalTime (fromGregorian 2015 6 13) (TimeOfDay 21 13 56)- , CalendarDiffTime 14 $ 7 * nominalDay + 5 * 3600 + 33 * 60 + 2.34- )- , testShowReadFormat- "recurringIntervalFormat etc."- (recurringIntervalFormat (calendarFormat ExtendedFormat) durationDaysFormat)- "R74/2015-06-13/P1Y2M7D"- (74, fromGregorian 2015 6 13, CalendarDiffDays 14 7)- , testShowReadFormat "timeOffsetFormat" iso8601Format "-06:30" (minutesToTimeZone (-390))- , testShowReadFormat "timeOffsetFormat" iso8601Format "-06:00" (minutesToTimeZone (-360))- , testReadFormat "timeOffsetFormat" iso8601Format "-06" (minutesToTimeZone (-360))- , testShowReadFormat "timeOffsetFormat" iso8601Format "+11:00" (minutesToTimeZone 660)- , testReadFormat "timeOffsetFormat" iso8601Format "+11" (minutesToTimeZone 660)- , testShowReadFormat "timeOffsetFormat" iso8601Format "+00:00" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" iso8601Format "+00" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" iso8601Format "-00:00" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" iso8601Format "-00" (minutesToTimeZone 0)- , testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+0000" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+00" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-0000" (minutesToTimeZone 0)- , testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-00" (minutesToTimeZone 0)- , testShowReadFormat "timeOffsetFormat" iso8601Format "+00:10" (minutesToTimeZone 10)- , testShowReadFormat "timeOffsetFormat" iso8601Format "-00:10" (minutesToTimeZone (-10))- , testShowReadFormat "timeOffsetFormat" iso8601Format "+01:35" (minutesToTimeZone 95)- , testShowReadFormat "timeOffsetFormat" iso8601Format "-01:35" (minutesToTimeZone (-95))- , testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+0135" (minutesToTimeZone 95)- , testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-0135" (minutesToTimeZone (-95))- , testShowReadFormat- "timeOffsetFormat"- (timeOffsetFormat BasicFormat)- "-1100"- (minutesToTimeZone $ negate $ 11 * 60)- , testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+1015" (minutesToTimeZone $ 615)- , testShowReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553-06:30"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-390)))- , testShowReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553-06:00"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-360)))- , testReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553-06"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-360)))- , testShowReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553+06:30"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 390))- , testShowReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553+06:00"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 360))- , testReadFormat- "zonedTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553+06"- (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 360))- , testShowReadFormat- "utcTimeFormat"- iso8601Format- "2024-07-06T08:45:56.553Z"- (UTCTime (fromGregorian 2024 07 06) (timeOfDayToTime $ TimeOfDay 8 45 56.553))- , testShowReadFormat- "utcTimeFormat"- iso8601Format- "2028-12-31T23:59:60.9Z"- (UTCTime (fromGregorian 2028 12 31) (timeOfDayToTime $ TimeOfDay 23 59 60.9))- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1994-W52-7" (fromGregorian 1995 1 1)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1995-W01-1" (fromGregorian 1995 1 2)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1996-W52-7" (fromGregorian 1996 12 29)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1997-W01-2" (fromGregorian 1996 12 31)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1997-W01-3" (fromGregorian 1997 1 1)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1974-W32-6" (fromGregorian 1974 8 10)- , testShowReadFormat "weekDateFormat" (weekDateFormat BasicFormat) "1974W326" (fromGregorian 1974 8 10)- , testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1995-W05-6" (fromGregorian 1995 2 4)- , testShowReadFormat "weekDateFormat" (weekDateFormat BasicFormat) "1995W056" (fromGregorian 1995 2 4)- , testShowReadFormat- "weekDateFormat"- (expandedWeekDateFormat 6 ExtendedFormat)- "+001995-W05-6"- (fromGregorian 1995 2 4)- , testShowReadFormat "weekDateFormat" (expandedWeekDateFormat 6 BasicFormat) "+001995W056" (fromGregorian 1995 2 4)- , testShowReadFormat "ordinalDateFormat" (ordinalDateFormat ExtendedFormat) "1846-235" (fromGregorian 1846 8 23)- , testShowReadFormat "ordinalDateFormat" (ordinalDateFormat BasicFormat) "1844236" (fromGregorian 1844 8 23)- , testShowReadFormat- "ordinalDateFormat"- (expandedOrdinalDateFormat 5 ExtendedFormat)- "+01846-235"- (fromGregorian 1846 8 23)- , testShowReadFormat "hourMinuteFormat" (hourMinuteFormat ExtendedFormat) "13:17.25" (TimeOfDay 13 17 15)- , testShowReadFormat "hourMinuteFormat" (hourMinuteFormat ExtendedFormat) "01:12.4" (TimeOfDay 1 12 24)- , testShowReadFormat "hourMinuteFormat" (hourMinuteFormat BasicFormat) "1317.25" (TimeOfDay 13 17 15)- , testShowReadFormat "hourMinuteFormat" (hourMinuteFormat BasicFormat) "0112.4" (TimeOfDay 1 12 24)- , testShowReadFormat "hourFormat" hourFormat "22" (TimeOfDay 22 0 0)- , testShowReadFormat "hourFormat" hourFormat "06" (TimeOfDay 6 0 0)- , testShowReadFormat "hourFormat" hourFormat "18.9475" (TimeOfDay 18 56 51)- ]--}+ nameTest+ "show format"+ [ testShowReadFormat "durationDaysFormat" durationDaysFormat "P0D" $ CalendarDiffDays 0 0,+ testShowReadFormat "durationDaysFormat" durationDaysFormat "P4Y" $ CalendarDiffDays 48 0,+ testShowReadFormat "durationDaysFormat" durationDaysFormat "P7M" $ CalendarDiffDays 7 0,+ testShowReadFormat "durationDaysFormat" durationDaysFormat "P5D" $ CalendarDiffDays 0 5,+ testShowReadFormat "durationDaysFormat" durationDaysFormat "P2Y3M81D" $ CalendarDiffDays 27 81,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P0D" $ CalendarDiffTime 0 0,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P4Y" $ CalendarDiffTime 48 0,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P7M" $ CalendarDiffTime 7 0,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P5D" $ CalendarDiffTime 0 $ 5 * nominalDay,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P2Y3M81D" $ CalendarDiffTime 27 $ 81 * nominalDay,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "PT2H" $ CalendarDiffTime 0 $ 7200,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "PT3M" $ CalendarDiffTime 0 $ 180,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "PT12S" $ CalendarDiffTime 0 $ 12,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "PT1M18.77634S" $ CalendarDiffTime 0 $ 78.77634,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "PT2H1M18.77634S" $ CalendarDiffTime 0 $ 7278.77634,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P5DT2H1M18.77634S" $+ CalendarDiffTime 0 $+ 5 * nominalDay + 7278.77634,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P7Y10M5DT2H1M18.77634S" $+ CalendarDiffTime 94 $+ 5 * nominalDay + 7278.77634,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P7Y10MT2H1M18.77634S" $+ CalendarDiffTime 94 $+ 7278.77634,+ testShowReadFormat "durationTimeFormat" durationTimeFormat "P8YT2H1M18.77634S" $ CalendarDiffTime 96 $ 7278.77634,+ testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0001-00-00" $+ CalendarDiffDays 12 0,+ testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0002-03-29" $+ CalendarDiffDays 27 29,+ testShowReadFormat "alternativeDurationDaysFormat" (alternativeDurationDaysFormat ExtendedFormat) "P0561-08-29" $+ CalendarDiffDays (561 * 12 + 8) 29,+ testShowReadFormat+ "alternativeDurationTimeFormat"+ (alternativeDurationTimeFormat ExtendedFormat)+ "P0000-00-01T00:00:00"+ $ CalendarDiffTime 0 86400,+ testShowReadFormat+ "alternativeDurationTimeFormat"+ (alternativeDurationTimeFormat ExtendedFormat)+ "P0007-10-05T02:01:18.77634"+ $ CalendarDiffTime 94+ $ 5 * nominalDay + 7278.77634,+ testShowReadFormat+ "alternativeDurationTimeFormat"+ (alternativeDurationTimeFormat ExtendedFormat)+ "P4271-10-05T02:01:18.77634"+ $ CalendarDiffTime (12 * 4271 + 10)+ $ 5 * nominalDay + 7278.77634,+ testShowReadFormat "centuryFormat" centuryFormat "02" 2,+ testShowReadFormat "centuryFormat" centuryFormat "21" 21,+ testShowReadFormat+ "intervalFormat etc."+ ( intervalFormat+ (localTimeFormat (calendarFormat ExtendedFormat) (timeOfDayFormat ExtendedFormat))+ durationTimeFormat+ )+ "2015-06-13T21:13:56/P1Y2M7DT5H33M2.34S"+ ( LocalTime (fromGregorian 2015 6 13) (TimeOfDay 21 13 56),+ CalendarDiffTime 14 $ 7 * nominalDay + 5 * 3600 + 33 * 60 + 2.34+ ),+ testShowReadFormat+ "recurringIntervalFormat etc."+ ( recurringIntervalFormat+ (localTimeFormat (calendarFormat ExtendedFormat) (timeOfDayFormat ExtendedFormat))+ durationTimeFormat+ )+ "R74/2015-06-13T21:13:56/P1Y2M7DT5H33M2.34S"+ ( 74,+ LocalTime (fromGregorian 2015 6 13) (TimeOfDay 21 13 56),+ CalendarDiffTime 14 $ 7 * nominalDay + 5 * 3600 + 33 * 60 + 2.34+ ),+ testShowReadFormat+ "recurringIntervalFormat etc."+ (recurringIntervalFormat (calendarFormat ExtendedFormat) durationDaysFormat)+ "R74/2015-06-13/P1Y2M7D"+ (74, fromGregorian 2015 6 13, CalendarDiffDays 14 7),+ testShowReadFormat "timeOffsetFormat" iso8601Format "-06:30" (minutesToTimeZone (-390)),+ testShowReadFormat "timeOffsetFormat" iso8601Format "-06:00" (minutesToTimeZone (-360)),+ testReadFormat "timeOffsetFormat" iso8601Format "-06" (minutesToTimeZone (-360)),+ testShowReadFormat "timeOffsetFormat" iso8601Format "+11:00" (minutesToTimeZone 660),+ testReadFormat "timeOffsetFormat" iso8601Format "+11" (minutesToTimeZone 660),+ testShowReadFormat "timeOffsetFormat" iso8601Format "+00:00" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" iso8601Format "+00" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" iso8601Format "-00:00" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" iso8601Format "-00" (minutesToTimeZone 0),+ testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+0000" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+00" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-0000" (minutesToTimeZone 0),+ testReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-00" (minutesToTimeZone 0),+ testShowReadFormat "timeOffsetFormat" iso8601Format "+00:10" (minutesToTimeZone 10),+ testShowReadFormat "timeOffsetFormat" iso8601Format "-00:10" (minutesToTimeZone (-10)),+ testShowReadFormat "timeOffsetFormat" iso8601Format "+01:35" (minutesToTimeZone 95),+ testShowReadFormat "timeOffsetFormat" iso8601Format "-01:35" (minutesToTimeZone (-95)),+ testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+0135" (minutesToTimeZone 95),+ testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "-0135" (minutesToTimeZone (-95)),+ testShowReadFormat+ "timeOffsetFormat"+ (timeOffsetFormat BasicFormat)+ "-1100"+ (minutesToTimeZone $ negate $ 11 * 60),+ testShowReadFormat "timeOffsetFormat" (timeOffsetFormat BasicFormat) "+1015" (minutesToTimeZone $ 615),+ testShowReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553-06:30"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-390))),+ testShowReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553-06:00"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-360))),+ testReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553-06"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone (-360))),+ testShowReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553+06:30"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 390)),+ testShowReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553+06:00"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 360)),+ testReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553+06"+ (ZonedTime (LocalTime (fromGregorian 2024 07 06) (TimeOfDay 8 45 56.553)) (minutesToTimeZone 360)),+ testReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-05-30T16:15:18Z"+ (ZonedTime (LocalTime (fromGregorian 2024 05 30) (TimeOfDay 16 15 18)) utc),+ testReadFormat+ "zonedTimeFormat"+ iso8601Format+ "2024-05-30T16:15:18"+ (ZonedTime (LocalTime (fromGregorian 2024 05 30) (TimeOfDay 16 15 18)) utc),+ testShowReadFormat+ "utcTimeFormat"+ iso8601Format+ "2024-07-06T08:45:56.553Z"+ (UTCTime (fromGregorian 2024 07 06) (timeOfDayToTime $ TimeOfDay 8 45 56.553)),+ testShowReadFormat+ "utcTimeFormat"+ iso8601Format+ "2028-12-31T23:59:60.9Z"+ (UTCTime (fromGregorian 2028 12 31) (timeOfDayToTime $ TimeOfDay 23 59 60.9)),+ testReadFormat+ "utcTimeFormat"+ iso8601Format+ "2028-12-31T23:59:60.9"+ (UTCTime (fromGregorian 2028 12 31) (timeOfDayToTime $ TimeOfDay 23 59 60.9)),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1994-W52-7" (fromGregorian 1995 1 1),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1995-W01-1" (fromGregorian 1995 1 2),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1996-W52-7" (fromGregorian 1996 12 29),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1997-W01-2" (fromGregorian 1996 12 31),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1997-W01-3" (fromGregorian 1997 1 1),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1974-W32-6" (fromGregorian 1974 8 10),+ testShowReadFormat "weekDateFormat" (weekDateFormat BasicFormat) "1974W326" (fromGregorian 1974 8 10),+ testShowReadFormat "weekDateFormat" (weekDateFormat ExtendedFormat) "1995-W05-6" (fromGregorian 1995 2 4),+ testShowReadFormat "weekDateFormat" (weekDateFormat BasicFormat) "1995W056" (fromGregorian 1995 2 4),+ testShowReadFormat+ "weekDateFormat"+ (expandedWeekDateFormat 6 ExtendedFormat)+ "+001995-W05-6"+ (fromGregorian 1995 2 4),+ testShowReadFormat "weekDateFormat" (expandedWeekDateFormat 6 BasicFormat) "+001995W056" (fromGregorian 1995 2 4),+ testShowReadFormat "ordinalDateFormat" (ordinalDateFormat ExtendedFormat) "1846-235" (fromGregorian 1846 8 23),+ testShowReadFormat "ordinalDateFormat" (ordinalDateFormat BasicFormat) "1844236" (fromGregorian 1844 8 23),+ testShowReadFormat+ "ordinalDateFormat"+ (expandedOrdinalDateFormat 5 ExtendedFormat)+ "+01846-235"+ (fromGregorian 1846 8 23),+ testShowReadFormat "hourMinuteFormat" (hourMinuteFormat ExtendedFormat) "13:17.25" (TimeOfDay 13 17 15),+ testShowReadFormat "hourMinuteFormat" (hourMinuteFormat ExtendedFormat) "01:12.4" (TimeOfDay 1 12 24),+ testShowReadFormat "hourMinuteFormat" (hourMinuteFormat BasicFormat) "1317.25" (TimeOfDay 13 17 15),+ testShowReadFormat "hourMinuteFormat" (hourMinuteFormat BasicFormat) "0112.4" (TimeOfDay 1 12 24),+ testShowReadFormat "hourFormat" hourFormat "22" (TimeOfDay 22 0 0),+ testShowReadFormat "hourFormat" hourFormat "06" (TimeOfDay 6 0 0),+ testShowReadFormat "hourFormat" hourFormat "18.9475" (TimeOfDay 18 56 51)+ ] testISO8601 :: TestTree testISO8601 = nameTest "ISO8601" [testShowFormats, testReadShowFormat]
test/main/Test/Format/ParseTime.hs view
@@ -1,883 +1,961 @@ {-# OPTIONS -fno-warn-orphans #-} -module Test.Format.ParseTime (- testParseTime,- test_parse_format,-) where--import Control.Monad-import Data.Char-import Data.Maybe-import Data.Proxy-import Data.Time.Compat-import Data.Time.Calendar.Month.Compat-import Data.Time.Calendar.OrdinalDate.Compat-import Data.Time.Calendar.Quarter.Compat-import Data.Time.Calendar.WeekDate.Compat-import Test.Arbitrary (supportedDayRange)-import Test.QuickCheck.Property-import Test.Tasty-import Test.Tasty.HUnit-import Test.Tasty.QuickCheck hiding (reason)-import Test.TestUtil--format :: FormatTime t => String -> t -> String-format f t = formatTime defaultTimeLocale f t--parse :: ParseTime t => Bool -> String -> String -> Maybe t-parse sp f t = parseTimeM sp defaultTimeLocale f t--data FormatOnly--data ParseAndFormat--data FormatCode pf t = MkFormatCode- { fcModifier :: String- , fcWidth :: Maybe Int- , fcAlt :: Bool- , fcSpecifier :: Char- }--instance Show (FormatCode pf t) where- show (MkFormatCode m w a s) =- let- ms = m- ws = fromMaybe "" $ fmap show w- as =- if a- then "E"- else ""- ss = [s]- in- '%' : (ms <> ws <> as <> ss)--formatCode :: FormatTime t => FormatCode pf t -> t -> String-formatCode fc = format $ show fc--parseCode :: ParseTime t => FormatCode ParseAndFormat t -> String -> Maybe t-parseCode fc = parse False $ show fc--class HasFormatCodes t where- allFormatCodes :: Proxy t -> [(Bool, Char)]- incompleteS :: Maybe t- incompleteS = Nothing--minCodeWidth :: Char -> Int-minCodeWidth _ = 0--fcShrink :: FormatCode pf t -> [FormatCode pf t]-fcShrink fc =- let- fc1 = case fcWidth fc of- Nothing -> []- Just w- | w > (minCodeWidth $ fcSpecifier fc) -> [fc{fcWidth = Nothing}, fc{fcWidth = Just $ w - 1}]- Just _ -> [fc{fcWidth = Nothing}]- fc2 = case fcAlt fc of- False -> []- True -> [fc{fcAlt = False}]- fc3 = case fcModifier fc of- "" -> []- _ -> [fc{fcModifier = ""}]- in- fc1 ++ fc2 ++ fc3--instance HasFormatCodes t => Arbitrary (FormatCode FormatOnly t) where- arbitrary = do- m <- oneof [return "", oneof $ fmap return ["", "-", "_", "0", "^", "#"]]- (a, s) <- oneof $ fmap return $ allFormatCodes (Proxy :: Proxy t)- w <-- case minCodeWidth s of- 0 -> return Nothing- mw -> oneof [return Nothing, fmap Just $ choose (mw, 15)]- return $ MkFormatCode m w a s- shrink = fcShrink--instance HasFormatCodes t => Arbitrary (FormatCode ParseAndFormat t) where- arbitrary = do- (a, s) <- oneof $ fmap return $ allFormatCodes (Proxy :: Proxy t)- m <-- case s of- 'Z' -> return ""- 'z' -> return ""- _ -> oneof [return "", oneof $ fmap return ["", "-", "_", "0"]]- return $ MkFormatCode m Nothing a s- shrink = fcShrink--testParseTime :: TestTree-testParseTime =- testGroup- "testParseTime"- []-{-- [ readsTests- , simpleFormatTests- , extests- , spacingTests- , particularParseTests- , badParseTests- , defaultTimeZoneTests- , militaryTimeZoneTests- , propertyTests- ]--}--yearDays :: Integer -> [Day]-yearDays y = [(fromGregorian y 1 1) .. (fromGregorian y 12 31)]--makeExhaustiveTest :: String -> [t] -> (t -> TestTree) -> TestTree-makeExhaustiveTest name cases f = testGroup name (fmap f cases)--extests :: TestTree-extests =- testGroup- "exhaustive"- ( [ makeExhaustiveTest "parse %y" [0 .. 99] parseYY- , makeExhaustiveTest "parse %-C %y 1900s" [0, 1, 50, 99] (parseCYY 19)- , makeExhaustiveTest "parse %-C %y 2000s" [0, 1, 50, 99] (parseCYY 20)- , makeExhaustiveTest "parse %-C %y 1400s" [0, 1, 50, 99] (parseCYY 14)- , makeExhaustiveTest "parse %C %y 0700s" [0, 1, 50, 99] (parseCYY2 7)- , makeExhaustiveTest "parse %-C %y 700s" [0, 1, 50, 99] (parseCYY 7)- , makeExhaustiveTest "parse %-C %y -700s" [0, 1, 50, 99] (parseCYY (-7))- , makeExhaustiveTest "parse %-C %y -70000s" [0, 1, 50, 99] (parseCYY (-70000))- , makeExhaustiveTest "parse %-C %y 10000s" [0, 1, 50, 99] (parseCYY 100)- , makeExhaustiveTest "parse %-C centuries" [20 .. 100] (parseCentury " ")- , makeExhaustiveTest "parse %-C century X" [1, 10, 20, 100] (parseCentury "X")- , makeExhaustiveTest "parse %-C century 2sp" [1, 10, 20, 100] (parseCentury " ")- , makeExhaustiveTest "parse %-C century 5sp" [1, 10, 20, 100] (parseCentury " ")- ]- ++ ( concat $- fmap- ( \y ->- [ {- (makeExhaustiveTest "parse %Y%m%d" (yearDays y) parseYMD)- , -} (makeExhaustiveTest "parse %Y %m %d" (yearDays y) parseYearDayD)- , (makeExhaustiveTest "parse %Y %-m %e" (yearDays y) parseYearDayE)- ]- )- [1, 4, 20, 753, 2000, 2011, 10001, (-1166)]- )- )--testReads :: (Eq a, Show a, Read a) => [(a, String)] -> String -> TestTree-testReads expected target =- let- found = reads target- result = assertEqual "" expected found- name = show target- in- Test.Tasty.HUnit.testCase name result--readsTestsParensSpaces ::- forall a.- (Eq a, Show a, Read a) =>- a ->- String ->- TestTree-readsTestsParensSpaces expected target =- testGroup- target- [ testReads [(expected, "")] $ target- , testReads [(expected, "")] $ "(" ++ target ++ ")"- , testReads [(expected, "")] $ " (" ++ target ++ ")"- , testReads [(expected, " ")] $ " ( " ++ target ++ " ) "- , testReads [(expected, " ")] $ " (( " ++ target ++ " )) "- , testReads ([] :: [(a, String)]) $ "(" ++ target- , testReads [(expected, ")")] $ "" ++ target ++ ")"- , testReads [(expected, "")] $ "((" ++ target ++ "))"- , testReads [(expected, " ")] $ " ( ( " ++ target ++ " ) ) "- ]--readsTests :: TestTree-readsTests =- testGroup- "reads"- [ readsTestsParensSpaces (3 :: Integer) "3"- , readsTestsParensSpaces "a" "\"a\""- , readsTestsParensSpaces testDay "1912-07-08"- , -- , readsTestsParensSpaces testDay "1912-7-8"- readsTestsParensSpaces testTimeOfDay "08:04:02"- -- , readsTestsParensSpaces testTimeOfDay "8:4:2"- ]- where- testDay = fromGregorian 1912 7 8- testTimeOfDay = TimeOfDay 8 4 2--epoch :: LocalTime-epoch = LocalTime (fromGregorian 1970 0 0) midnight--testReadSTime :: (Show a, Eq a, ParseTime a) => [(a, String)] -> String -> String -> TestTree-testReadSTime expected formatStr target =- let- found = readSTime False defaultTimeLocale formatStr target- result = assertEqual "" expected found- name = (show formatStr) ++ " of " ++ (show target)- in- Test.Tasty.HUnit.testCase name result--simpleFormatTests :: TestTree-simpleFormatTests =- testGroup- "simple"- [ testReadSTime [(epoch, "")] "" ""- , testReadSTime [(epoch, " ")] "" " "- , testReadSTime [(epoch, "")] " " " "- , testReadSTime [(epoch, "")] " " " "- , testReadSTime [(epoch, "")] "%k" "0"- , testReadSTime [(epoch, "")] "%k" " 0"- , testReadSTime [(epoch, "")] "%m" "01"- , testReadSTime [(epoch, " ")] "%m" "01 "- , testReadSTime [(epoch, " ")] " %m" " 01 "- , testReadSTime [(epoch, "")] " %m" " 01"- , -- https://ghc.haskell.org/trac/ghc/ticket/9150- testReadSTime [(epoch, "")] " %M" " 00"- , testReadSTime [(epoch, "")] "%M " "00 "- , testReadSTime [(epoch, "")] "%Q" ""- , testReadSTime [(epoch, " ")] "%Q" " "- , testReadSTime [(epoch, "X")] "%Q" "X"- , testReadSTime [(epoch, " X")] "%Q" " X"- , testReadSTime [(epoch, "")] "%Q " " "- , testReadSTime [(epoch, "")] "%Q X" " X"- , testReadSTime [(epoch, "")] "%QX" "X"- ]--spacingForFormatTests :: (Show t, Eq t, ParseTime t) => t -> String -> String -> TestTree-spacingForFormatTests expected formatStr target =- testGroup- formatStr- [ parseTest False (Just expected) formatStr target- , parseTest True (Just expected) formatStr target- , parseTest False (Just expected) (formatStr ++ " ") (target ++ " ")- , parseTest True (Just expected) (formatStr ++ " ") (target ++ " ")- , parseTest False (Just expected) (" " ++ formatStr) (" " ++ target)- , parseTest True (Just expected) (" " ++ formatStr) (" " ++ target)- , parseTest True (Just expected) ("" ++ formatStr) (" " ++ target)- , parseTest True (Just expected) (" " ++ formatStr) (" " ++ target)- ]--spacingTests :: TestTree-spacingTests =- testGroup- "spacing"- [ spacingForFormatTests epoch "%Q" ""- , spacingForFormatTests epoch "%Q" ".0"- , spacingForFormatTests epoch "%k" " 0"- , spacingForFormatTests epoch "%M" "00"- , spacingForFormatTests epoch "%m" "01"- , spacingForFormatTests (TimeZone 120 False "") "%z" "+0200"- , spacingForFormatTests (TimeZone 120 False "") "%Z" "+0200"- , spacingForFormatTests (TimeZone (-480) False "PST") "%Z" "PST"- ]--particularParseTests :: TestTree-particularParseTests =- testGroup- "particular"- [ parseTest @Day True Nothing "%-d%-m%0Y" "2122012" -- ISSUE #232- , parseTest @Day True Nothing "%-d%-m%0Y" "2132012" -- ISSUE #232- ]--badParseTests :: TestTree-badParseTests = testGroup "bad" [parseTest False (Nothing :: Maybe Day) "%Y" ""]--{--parseYMD :: Day -> TestTree-parseYMD day = case toGregorian day of- (y, m, d) -> parseTest False (Just day) "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))--}--parseYearDayD :: Day -> TestTree-parseYearDayD day = case toGregorian day of- (y, m, d) -> parseTest False (Just day) "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))--parseYearDayE :: Day -> TestTree-parseYearDayE day = case toGregorian day of- (y, m, d) -> parseTest False (Just day) "%Y %-m %e" ((show y) ++ " " ++ (show m) ++ " " ++ (show d))---- | 1969 - 2068-expectedYear :: Integer -> Integer-expectedYear i | i >= 69 = 1900 + i-expectedYear i = 2000 + i--show2 :: (Show n, Integral n) => n -> String-show2 i = (show (div i 10)) ++ (show (mod i 10))--parseYY :: Integer -> TestTree-parseYY i = parseTest False (Just (fromGregorian (expectedYear i) 1 1)) "%y" (show2 i)--parseCYY :: Integer -> Integer -> TestTree-parseCYY c i = parseTest False (Just (fromGregorian ((c * 100) + i) 1 1)) "%-C %y" ((show c) ++ " " ++ (show2 i))--parseCYY2 :: Integer -> Integer -> TestTree-parseCYY2 c i = parseTest False (Just (fromGregorian ((c * 100) + i) 1 1)) "%C %y" ((show2 c) ++ " " ++ (show2 i))--parseCentury :: String -> Integer -> TestTree-parseCentury int c =- parseTest False (Just (fromGregorian (c * 100) 1 1)) ("%-C" ++ int ++ "%y") ((show c) ++ int ++ "00")--parseTest :: forall t. (Show t, Eq t, ParseTime t) => Bool -> Maybe t -> String -> String -> TestTree-parseTest sp expected formatStr target =- let- found = parse sp formatStr target- result = assertEqual "" expected found- name =- (show formatStr)- ++ " of "- ++ (show target)- ++ ( if sp- then " allowing spaces"- else ""- )- in- Test.Tasty.HUnit.testCase name result--enumAdd :: Enum a => Int -> a -> a-enumAdd i a = toEnum (i + fromEnum a)--getMilZoneLetter :: Int -> Char-getMilZoneLetter 0 = 'Z'-getMilZoneLetter h | h < 0 = enumAdd (negate h) 'M'-getMilZoneLetter h | h < 10 = enumAdd (h - 1) 'A'-getMilZoneLetter h = enumAdd (h - 10) 'K'--getMilZone :: Int -> TimeZone-getMilZone hour = TimeZone (hour * 60) False [getMilZoneLetter hour]--testParseTimeZone :: TimeZone -> TestTree-testParseTimeZone tz = parseTest False (Just tz) "%Z" (timeZoneName tz)--defaultTimeZoneTests :: TestTree-defaultTimeZoneTests = testGroup "default time zones" (fmap testParseTimeZone (knownTimeZones defaultTimeLocale))--militaryTimeZoneTests :: TestTree-militaryTimeZoneTests = testGroup "military time zones" (fmap (testParseTimeZone . getMilZone) [-12 .. 12])---- missing from the time package-instance Eq ZonedTime where- ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2--compareResult' :: (Eq a, Show a) => String -> a -> a -> Result-compareResult' extra expected found- | expected == found = succeeded- | otherwise = failed{reason = "expected " ++ (show expected) ++ ", found " ++ (show found) ++ extra}--compareResult :: (Eq a, Show a) => a -> a -> Result-compareResult = compareResult' ""--compareParse ::- forall a.- (Eq a, Show a, ParseTime a) =>- a ->- String ->- String ->- Result-compareParse expected fmt text = compareResult' (", parsing " ++ (show text)) (Just expected) (parse False fmt text)-------- * tests for debugging failing cases-----test_parse_format :: (FormatTime t, ParseTime t, Show t) => String -> t -> (String, String, Maybe t)-test_parse_format f t =- let- s = format f t- in- (show t, s, parse False f s `asTypeOf` Just t)-------- * show and read-----reads_expect :: a -> [(a, String)]-reads_expect t = [(t, "")]--prop_read_show :: (Read a, Show a, Eq a) => a -> Result-prop_read_show t = compareResult (reads_expect t) (reads (show t))--prop_read_show_ZonedUTC :: ZonedTime -> Result-prop_read_show_ZonedUTC t = compareResult (reads_expect $ zonedTimeToUTC t) (reads (show t))--prop_read_show_LocalUTC :: LocalTime -> Result-prop_read_show_LocalUTC t = compareResult (reads_expect $ localTimeToUTC utc t) (reads (show t))--prop_read_show_UTC_no_TZ :: UTCTime -> Result-prop_read_show_UTC_no_TZ t = compareResult (reads_expect t) $ reads $ show $ utcToLocalTime utc t-------- * special show functions-----prop_parse_showWeekDate :: Day -> Result-prop_parse_showWeekDate d = compareParse d "%G-W%V-%u" (showWeekDate d)--prop_parse_showGregorian :: Day -> Result-prop_parse_showGregorian d = compareParse d "%Y-%m-%d" (showGregorian d)--prop_parse_showOrdinalDate :: Day -> Result-prop_parse_showOrdinalDate d = compareParse d "%Y-%j" (showOrdinalDate d)-------- * fromMondayStartWeek and fromSundayStartWeek-----prop_fromMondayStartWeek :: Day -> Result-prop_fromMondayStartWeek d =- let- (w, wd) = mondayStartWeek d- (y, _, _) = toGregorian d- in- compareResult d (fromMondayStartWeek y w wd)--prop_fromSundayStartWeek :: Day -> Result-prop_fromSundayStartWeek d =- let- (w, wd) = sundayStartWeek d- (y, _, _) = toGregorian d- in- compareResult d (fromSundayStartWeek y w wd)---- t == parse (format t)-prop_parse_format :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result-prop_parse_format (FormatString f) t = compareParse t f (format f t)---- t == parse (upper (format t))-prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result-prop_parse_format_upper (FormatString f) t = compareParse t f (map toUpper $ format f t)---- t == parse (lower (format t))-prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result-prop_parse_format_lower (FormatString f) t = compareParse t f (map toLower $ format f t)---- Default time is 1970-01-01 00:00:00 +0000 (which was a Thursday)-in1970 :: Maybe String -> Char -> String -> Maybe String-in1970 _ 'j' "366" = Nothing -- 1970 was not a leap year-in1970 _ 'U' "53" = Nothing -- last day of 1970 was Sunday-start-week 52-in1970 _ 'W' "53" = Nothing -- last day of 1970 was Monday-start-week 52-in1970 (Just s) 'S' "60" = Just s -- no leap second without other data-in1970 _ _ s = Just s---- format t == format (parse (format t))-prop_format_parse_format ::- forall t.- (HasFormatCodes t, FormatTime t, ParseTime t) =>- Proxy t ->- FormatCode ParseAndFormat t ->- t ->- Result-prop_format_parse_format _ fc v =- let- s1 = formatCode fc v- ms1 = in1970 (fmap (formatCode fc) (incompleteS :: Maybe t)) (fcSpecifier fc) s1- mv2 :: Maybe t- mv2 = parseCode fc s1- ms2 = fmap (formatCode fc) mv2- in- compareResult ms1 ms2--instance HasFormatCodes Day where- allFormatCodes _ = [(False, s) | s <- "DFxYyCBbhmdejfVUW"]--instance HasFormatCodes TimeOfDay where- allFormatCodes _ = [(False, s) | s <- "RTXrPpHkIlMSqQ"]--instance HasFormatCodes LocalTime where- allFormatCodes _ = allFormatCodes (Proxy :: Proxy Day) ++ allFormatCodes (Proxy :: Proxy TimeOfDay)--instance HasFormatCodes TimeZone where- allFormatCodes _ = [(a, s) | a <- [False, True], s <- "zZ"]--instance HasFormatCodes ZonedTime where- allFormatCodes _ =- [(False, s) | s <- "cs"]- ++ allFormatCodes (Proxy :: Proxy LocalTime)- ++ allFormatCodes (Proxy :: Proxy TimeZone)--instance HasFormatCodes UTCTime where- allFormatCodes _ = [(False, s) | s <- "cs"] ++ allFormatCodes (Proxy :: Proxy LocalTime)- incompleteS = Just $ UTCTime (fromGregorian 2000 1 1) 0--instance HasFormatCodes UniversalTime where- allFormatCodes _ = allFormatCodes (Proxy :: Proxy LocalTime)-------- * crashes in parse-----newtype Input- = Input String--instance Show Input where- show (Input s) = s--instance Arbitrary Input where- arbitrary = liftM Input $ list cs- where- cs = elements (['0' .. '9'] ++ ['-', ' ', '/'] ++ ['a' .. 'z'] ++ ['A' .. 'Z'])- list g = sized (\n -> choose (0, n) >>= \l -> replicateM l g)--instance CoArbitrary Input where- coarbitrary (Input s) = coarbitrary (sum (map ord s))--prop_no_crash_bad_input :: (Eq t, ParseTime t) => FormatString t -> Input -> Property-prop_no_crash_bad_input fs@(FormatString f) (Input s) =- property $- case parse False f s of- Nothing -> True- Just t -> t == t `asTypeOf` formatType fs-----------newtype FormatString a- = FormatString String--formatType :: FormatString t -> t-formatType _ = undefined--instance Show (FormatString a) where- show (FormatString f) = show f--typedTests :: (forall t. (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result) -> [TestTree]-typedTests prop =- [ nameTest "Day" $ tgroup dayFormats prop- -- , nameTest "Month" $ tgroup monthFormats prop- , nameTest "TimeOfDay" $ tgroup timeOfDayFormats prop- , nameTest "LocalTime" $ tgroup localTimeFormats prop- , nameTest "TimeZone" $ tgroup timeZoneFormats prop- , nameTest "ZonedTime" $ tgroup zonedTimeFormats prop- , nameTest "ZonedTime" $- tgroup zonedTimeAlmostFormats $- \fmt t -> (todSec $ localTimeOfDay $ zonedTimeToLocalTime t) < 60 ==> prop fmt t- , nameTest "UTCTime" $ tgroup utcTimeAlmostFormats $ \fmt t -> utctDayTime t < 86400 ==> prop fmt t- , nameTest "UniversalTime" $ tgroup universalTimeFormats prop- -- , nameTest "CalendarDiffDays" $ tgroup calendarDiffDaysFormats prop- -- , nameTest "CalenderDiffTime" $ tgroup calendarDiffTimeFormats prop- -- , nameTest "DiffTime" $ tgroup diffTimeFormats prop- -- , nameTest "NominalDiffTime" $ tgroup nominalDiffTimeFormats prop- ]--allTypes ::- (forall t. (Eq t, Show t, Arbitrary t, FormatTime t, ParseTime t, HasFormatCodes t) => String -> Proxy t -> r) ->- [r]-allTypes f =- [ f "Day" (Proxy :: Proxy Day)- , f "TimeOfDay" (Proxy :: Proxy TimeOfDay)- , f "LocalTime" (Proxy :: Proxy LocalTime)- , f "TimeZone" (Proxy :: Proxy TimeZone)- , f "ZonedTime" (Proxy :: Proxy ZonedTime)- , f "UTCTime" (Proxy :: Proxy UTCTime)- , f "UniversalTime" (Proxy :: Proxy UniversalTime)- ]--allLeapSecondTypes ::- (forall t. (Eq t, Show t, Arbitrary t, FormatTime t, ParseTime t, HasFormatCodes t) => String -> t -> r) ->- [r]-allLeapSecondTypes f =- let- day :: Day- day = fromGregorian 2000 01 01- lsTimeOfDay :: TimeOfDay- lsTimeOfDay = TimeOfDay 23 59 60.5- lsLocalTime :: LocalTime- lsLocalTime = LocalTime day lsTimeOfDay- lsZonedTime :: ZonedTime- lsZonedTime = ZonedTime lsLocalTime utc- lsUTCTime :: UTCTime- lsUTCTime = UTCTime day 86400.5- in- [ f "TimeOfDay" lsTimeOfDay- , f "LocalTime" lsLocalTime- , f "ZonedTime" lsZonedTime- , f "UTCTime" lsUTCTime- ]--parseEmptyTest ::- forall t.- ParseTime t =>- Proxy t ->- Assertion-parseEmptyTest _ =- case parse False "" "" :: Maybe t of- Just _ -> return ()- Nothing -> assertFailure "failed"--parseEmptyTests :: TestTree-parseEmptyTests = nameTest "parse empty" $ allTypes $ \name p -> nameTest name $ parseEmptyTest p--formatParseFormatTests :: TestTree-formatParseFormatTests =- nameTest- "format_parse_format"- [ localOption (QuickCheckTests 50000) $- nameTest "general" $- allTypes $- \name p -> nameTest name $ prop_format_parse_format p- , nameTest "#177" $- [ nameTest "start" $ \fc -> prop_format_parse_format Proxy fc (fst supportedDayRange)- , nameTest "end" $ \fc -> prop_format_parse_format Proxy fc (snd supportedDayRange)- ]- , nameTest "leapsecond" $ allLeapSecondTypes $ \name t -> nameTest name $ \fc -> prop_format_parse_format Proxy fc t- ]--badInputTests :: TestTree-badInputTests =- nameTest- "no_crash_bad_input"- [ nameTest "Day" $ tgroup (dayFormats ++ partialDayFormats ++ failingPartialDayFormats) prop_no_crash_bad_input- , nameTest "TimeOfDay" $ tgroup (timeOfDayFormats ++ partialTimeOfDayFormats) prop_no_crash_bad_input- , nameTest "LocalTime" $ tgroup (localTimeFormats ++ partialLocalTimeFormats) prop_no_crash_bad_input- , nameTest "TimeZone" $ tgroup (timeZoneFormats) prop_no_crash_bad_input- , nameTest "ZonedTime" $- tgroup (zonedTimeFormats ++ zonedTimeAlmostFormats ++ partialZonedTimeFormats) prop_no_crash_bad_input- , nameTest "UTCTime" $ tgroup (utcTimeAlmostFormats ++ partialUTCTimeFormats) prop_no_crash_bad_input- , nameTest "UniversalTime" $- tgroup (universalTimeFormats ++ partialUniversalTimeFormats) prop_no_crash_bad_input- ]--readShowTests :: TestTree-readShowTests =- nameTest- "read_show"- [ nameTest "Day" (prop_read_show :: Day -> Result)- , nameTest "Month" (prop_read_show :: Month -> Result)- , nameTest "QuarterOfYear" (prop_read_show :: QuarterOfYear -> Result)- , nameTest "Quarter" (prop_read_show :: Quarter -> Result)- , nameTest "TimeOfDay" (prop_read_show :: TimeOfDay -> Result)- , nameTest "LocalTime" (prop_read_show :: LocalTime -> Result)- , nameTest "TimeZone" (prop_read_show :: TimeZone -> Result)- , nameTest "ZonedTime" (prop_read_show :: ZonedTime -> Result)- , nameTest "UTCTime" (prop_read_show :: UTCTime -> Result)- , nameTest "UTCTime (zoned)" prop_read_show_ZonedUTC- , nameTest "UTCTime (local)" prop_read_show_LocalUTC- , nameTest "UTCTime (no TZ)" prop_read_show_UTC_no_TZ- , nameTest "UniversalTime" (prop_read_show :: UniversalTime -> Result)- , nameTest "NominalDiffTime" (prop_read_show :: NominalDiffTime -> Result)- , nameTest "DiffTime" (prop_read_show :: DiffTime -> Result)- -- , nameTest "CalendarDiffDays" (prop_read_show :: CalendarDiffDays -> Result)- -- , nameTest "CalendarDiffTime" (prop_read_show :: CalendarDiffTime -> Result)- ]--parseShowTests :: TestTree-parseShowTests =- nameTest- "parse_show"- [ nameTest "showWeekDate" prop_parse_showWeekDate- , nameTest "showGregorian" prop_parse_showGregorian- , nameTest "showOrdinalDate" prop_parse_showOrdinalDate- ]--propertyTests :: TestTree-propertyTests =- localOption (QuickCheckTests 2000) $- nameTest- "properties"- [ readShowTests- , parseShowTests- , nameTest "fromMondayStartWeek" prop_fromMondayStartWeek- , nameTest "fromSundayStartWeek" prop_fromSundayStartWeek- , nameTest "parse_format" $ typedTests prop_parse_format- , nameTest "parse_format_lower" $ typedTests prop_parse_format_lower- , nameTest "parse_format_upper" $ typedTests prop_parse_format_upper- , parseEmptyTests- , formatParseFormatTests- , badInputTests- ]--dayFormats :: [FormatString Day]-dayFormats =- map- FormatString- -- numeric year, month, day- [ "%Y-%m-%d"- , "%Y%m%d"- , "%C%y%m%d"- , "%Y %m %e"- , "%m/%d/%Y"- , "%d/%m/%Y"- , "%Y/%d/%m"- , "%D %C"- , "%F"- , -- month names- "%Y-%B-%d"- , "%Y-%b-%d"- , "%Y-%h-%d"- , "%C-%y-%B-%d"- , "%C-%y-%b-%d"- , "%C-%y-%h-%d"- , -- ordinal dates- "%Y-%j"- , "%C-%y-%j"- , -- ISO week dates- "%G-%V-%u"- , "%G-%V-%a"- , "%G-%V-%A"- , "%G-%V-%w"- , "%A week %V, %G"- , "day %V, week %A, %G"- , "%G-W%V-%u"- , "%f%g-%V-%u"- , "%f%g-%V-%a"- , "%f%g-%V-%A"- , "%f%g-%V-%w"- , "%A week %V, %f%g"- , "day %V, week %A, %f%g"- , "%f%g-W%V-%u"- , -- monday and sunday week dates- "%Y-w%U-%A"- , "%Y-w%W-%A"- , "%Y-%A-w%U"- , "%Y-%A-w%W"- , "%A week %U, %Y"- , "%A week %W, %Y"- ]--monthFormats :: [FormatString Month]-monthFormats =- map- FormatString- -- numeric year, month- [ "%Y-%m"- , "%Y%m"- , "%C%y%m"- , "%Y %m"- , "%m/%Y"- , "%m/%Y"- , "%Y/%m"- , "%C %y %m"- , -- month names- "%Y-%B"- , "%Y-%b"- , "%Y-%h"- , "%C-%y-%B"- , "%C-%y-%b"- , "%C-%y-%h"- ]--timeOfDayFormats :: [FormatString TimeOfDay]-timeOfDayFormats =- map- FormatString- -- 24 h formats- [ "%H:%M:%S.%q"- , "%k:%M:%S.%q"- , "%H%M%S.%q"- , "%T.%q"- , "%X.%q"- , "%R:%S.%q"- , "%H:%M:%S%Q"- , "%k:%M:%S%Q"- , "%H%M%S%Q"- , "%T%Q"- , "%X%Q"- , "%R:%S%Q"- , -- 12 h formats- "%I:%M:%S.%q %p"- , "%I:%M:%S.%q %P"- , "%l:%M:%S.%q %p"- , "%r %q"- , "%I:%M:%S%Q %p"- , "%I:%M:%S%Q %P"- , "%l:%M:%S%Q %p"- , "%r %Q"- ]--localTimeFormats :: [FormatString LocalTime]-localTimeFormats = map FormatString [] {-"%Q","%Q ","%QX"-}--timeZoneFormats :: [FormatString TimeZone]-timeZoneFormats = map FormatString ["%z", "%z%Z", "%Z%z", "%Z", "%Ez", "%EZ"]--zonedTimeFormats :: [FormatString ZonedTime]-zonedTimeFormats =- map- FormatString- [ "%a, %d %b %Y %H:%M:%S.%q %z"- , "%a, %d %b %Y %H:%M:%S%Q %z"- , "%a, %d %b %Y %H:%M:%S.%q %Z"- , "%a, %d %b %Y %H:%M:%S%Q %Z"- ]--zonedTimeAlmostFormats :: [FormatString ZonedTime]-zonedTimeAlmostFormats = map FormatString ["%s.%q %z", "%s%Q %z", "%s.%q %Z", "%s%Q %Z"]--utcTimeAlmostFormats :: [FormatString UTCTime]-utcTimeAlmostFormats = map FormatString ["%s.%q", "%s%Q"]--universalTimeFormats :: [FormatString UniversalTime]-universalTimeFormats = map FormatString []--calendarDiffDaysFormats :: [FormatString CalendarDiffDays]-calendarDiffDaysFormats = map FormatString ["%yy%Bm%ww%Dd", "%yy%Bm%dd", "%bm%ww%Dd", "%bm%dd"]--calendarDiffTimeFormats :: [FormatString CalendarDiffTime]-calendarDiffTimeFormats =- map- FormatString- [ "%yy%Bm%ww%Dd%Hh%Mm%ESs"- , "%bm%ww%Dd%Hh%Mm%ESs"- , "%bm%dd%Hh%Mm%ESs"- , "%bm%hh%Mm%ESs"- , "%bm%mm%ESs"- , "%bm%mm%0ESs"- , "%bm%Ess"- , "%bm%0Ess"- ]--diffTimeFormats :: [FormatString DiffTime]-diffTimeFormats =- map FormatString ["%ww%Dd%Hh%Mm%ESs", "%dd%Hh%Mm%ESs", "%hh%Mm%ESs", "%mm%ESs", "%mm%0ESs", "%Ess", "%0Ess"]--nominalDiffTimeFormats :: [FormatString NominalDiffTime]-nominalDiffTimeFormats =- map FormatString ["%ww%Dd%Hh%Mm%ESs", "%dd%Hh%Mm%ESs", "%hh%Mm%ESs", "%mm%ESs", "%mm%0ESs", "%Ess", "%0Ess"]-------- * Formats that do not include all the information-----partialDayFormats :: [FormatString Day]-partialDayFormats = map FormatString []--partialTimeOfDayFormats :: [FormatString TimeOfDay]-partialTimeOfDayFormats = map FormatString ["%H", "%M", "%S", "%H:%M"]--partialLocalTimeFormats :: [FormatString LocalTime]-partialLocalTimeFormats = map FormatString []--partialZonedTimeFormats :: [FormatString ZonedTime]-partialZonedTimeFormats =- map- FormatString- -- %s does not include second decimals- [ "%s %z"- , -- %S does not include second decimals- "%c"- , "%a, %d %b %Y %H:%M:%S %Z"- ]--partialUTCTimeFormats :: [FormatString UTCTime]-partialUTCTimeFormats =- map- FormatString- -- %s does not include second decimals- [ "%s"- , -- %c does not include second decimals- "%c"- ]--partialUniversalTimeFormats :: [FormatString UniversalTime]-partialUniversalTimeFormats = map FormatString []--failingPartialDayFormats :: [FormatString Day]-failingPartialDayFormats =- map- FormatString- -- ISO week dates with two digit year.- -- This can fail in the beginning or the end of a year where- -- the ISO week date year does not match the gregorian year.- ["%g-%V-%u", "%g-%V-%a", "%g-%V-%A", "%g-%V-%w", "%A week %V, %g", "day %V, week %A, %g", "%g-W%V-%u"]+module Test.Format.ParseTime+ ( testParseTime,+ test_parse_format,+ )+where++import Control.Monad+import Data.Char+import Data.Maybe+import Data.Proxy+import Data.Time.Calendar.Month.Compat+import Data.Time.Calendar.OrdinalDate.Compat+import Data.Time.Calendar.Quarter.Compat+import Data.Time.Calendar.WeekDate.Compat+import Data.Time.Compat+import Test.Arbitrary (supportedDayRange)+import Test.QuickCheck.Property+import Test.Tasty+import Test.Tasty.HUnit+import Test.Tasty.QuickCheck hiding (reason)+import Test.TestUtil++format :: (FormatTime t) => String -> t -> String+format f t = formatTime defaultTimeLocale f t++parse :: (ParseTime t) => Bool -> String -> String -> Maybe t+parse sp f t = parseTimeM sp defaultTimeLocale f t++data FormatOnly++data ParseAndFormat++data FormatCode pf t = MkFormatCode+ { fcModifier :: String,+ fcWidth :: Maybe Int,+ fcAlt :: Bool,+ fcSpecifier :: Char+ }++instance Show (FormatCode pf t) where+ show (MkFormatCode m w a s) =+ let ms = m+ ws = fromMaybe "" $ fmap show w+ as =+ if a+ then "E"+ else ""+ ss = [s]+ in '%' : (ms <> ws <> as <> ss)++formatCode :: (FormatTime t) => FormatCode pf t -> t -> String+formatCode fc = format $ show fc++parseCode :: (ParseTime t) => FormatCode ParseAndFormat t -> String -> Maybe t+parseCode fc = parse False $ show fc++class HasFormatCodes t where+ allFormatCodes :: Proxy t -> [(Bool, Char)]+ incompleteS :: Maybe t+ incompleteS = Nothing++minCodeWidth :: Char -> Int+minCodeWidth _ = 0++fcShrink :: FormatCode pf t -> [FormatCode pf t]+fcShrink fc =+ let fc1 = case fcWidth fc of+ Nothing -> []+ Just w+ | w > (minCodeWidth $ fcSpecifier fc) -> [fc {fcWidth = Nothing}, fc {fcWidth = Just $ w - 1}]+ Just _ -> [fc {fcWidth = Nothing}]+ fc2 = case fcAlt fc of+ False -> []+ True -> [fc {fcAlt = False}]+ fc3 = case fcModifier fc of+ "" -> []+ _ -> [fc {fcModifier = ""}]+ in fc1 ++ fc2 ++ fc3++instance (HasFormatCodes t) => Arbitrary (FormatCode FormatOnly t) where+ arbitrary = do+ m <- oneof [return "", oneof $ fmap return ["", "-", "_", "0", "^", "#"]]+ (a, s) <- oneof $ fmap return $ allFormatCodes (Proxy :: Proxy t)+ w <-+ case minCodeWidth s of+ 0 -> return Nothing+ mw -> oneof [return Nothing, fmap Just $ choose (mw, 15)]+ return $ MkFormatCode m w a s+ shrink = fcShrink++instance (HasFormatCodes t) => Arbitrary (FormatCode ParseAndFormat t) where+ arbitrary = do+ (a, s) <- oneof $ fmap return $ allFormatCodes (Proxy :: Proxy t)+ m <-+ case s of+ 'Z' -> return ""+ 'z' -> return ""+ _ -> oneof [return "", oneof $ fmap return ["", "-", "_", "0"]]+ return $ MkFormatCode m Nothing a s+ shrink = fcShrink++testParseTime :: TestTree+testParseTime =+ testGroup+ "testParseTime" []++yearDays :: Integer -> [Day]+yearDays y = [(fromGregorian y 1 1) .. (fromGregorian y 12 31)]++makeExhaustiveTest :: String -> [t] -> (t -> TestTree) -> TestTree+makeExhaustiveTest name cases f = testGroup name (fmap f cases)++extests :: TestTree+extests =+ testGroup+ "exhaustive"+ ( [ makeExhaustiveTest "parse %y" [0 .. 99] parseYY,+ makeExhaustiveTest "parse %-C %y 1900s" [0, 1, 50, 99] (parseCYY 19),+ makeExhaustiveTest "parse %-C %y 2000s" [0, 1, 50, 99] (parseCYY 20),+ makeExhaustiveTest "parse %-C %y 1400s" [0, 1, 50, 99] (parseCYY 14),+ makeExhaustiveTest "parse %C %y 0700s" [0, 1, 50, 99] (parseCYY2 7),+ makeExhaustiveTest "parse %-C %y 700s" [0, 1, 50, 99] (parseCYY 7),+ makeExhaustiveTest "parse %-C %y -700s" [0, 1, 50, 99] (parseCYY (-7)),+ makeExhaustiveTest "parse %-C %y -70000s" [0, 1, 50, 99] (parseCYY (-70000)),+ makeExhaustiveTest "parse %-C %y 10000s" [0, 1, 50, 99] (parseCYY 100),+ makeExhaustiveTest "parse %-C centuries" [20 .. 100] (parseCentury " "),+ makeExhaustiveTest "parse %-C century X" [1, 10, 20, 100] (parseCentury "X"),+ makeExhaustiveTest "parse %-C century 2sp" [1, 10, 20, 100] (parseCentury " "),+ makeExhaustiveTest "parse %-C century 5sp" [1, 10, 20, 100] (parseCentury " ")+ ]+ ++ ( concat $+ fmap+ ( \y ->+ [ {- (makeExhaustiveTest "parse %Y%m%d" (yearDays y) parseYMD)+ , -} (makeExhaustiveTest "parse %Y %m %d" (yearDays y) parseYearDayD),+ (makeExhaustiveTest "parse %Y %-m %e" (yearDays y) parseYearDayE)+ ]+ )+ [1, 4, 20, 753, 2000, 2011, 10001, (-1166)]+ )+ )++testReads :: (Eq a, Show a, Read a) => [(a, String)] -> String -> TestTree+testReads expected target =+ let found = reads target+ result = assertEqual "" expected found+ name = show target+ in Test.Tasty.HUnit.testCase name result++readsTestsParensSpaces ::+ forall a.+ (Eq a, Show a, Read a) =>+ a ->+ String ->+ TestTree+readsTestsParensSpaces expected target =+ testGroup+ target+ [ testReads [(expected, "")] $ target,+ testReads [(expected, "")] $ "(" ++ target ++ ")",+ testReads [(expected, "")] $ " (" ++ target ++ ")",+ testReads [(expected, " ")] $ " ( " ++ target ++ " ) ",+ testReads [(expected, " ")] $ " (( " ++ target ++ " )) ",+ testReads ([] :: [(a, String)]) $ "(" ++ target,+ testReads [(expected, ")")] $ "" ++ target ++ ")",+ testReads [(expected, "")] $ "((" ++ target ++ "))",+ testReads [(expected, " ")] $ " ( ( " ++ target ++ " ) ) "+ ]++readsTests :: TestTree+readsTests =+ testGroup+ "reads"+ [ readsTestsParensSpaces (3 :: Integer) "3",+ readsTestsParensSpaces "a" "\"a\"",+ readsTestsParensSpaces testDay "1912-07-08",+ -- , readsTestsParensSpaces testDay "1912-7-8"+ readsTestsParensSpaces testTimeOfDay "08:04:02"+ -- , readsTestsParensSpaces testTimeOfDay "8:4:2"+ ]+ where+ testDay = fromGregorian 1912 7 8+ testTimeOfDay = TimeOfDay 8 4 2++epoch :: LocalTime+epoch = LocalTime (fromGregorian 1970 0 0) midnight++testReadSTime :: (Show a, Eq a, ParseTime a) => [(a, String)] -> String -> String -> TestTree+testReadSTime expected formatStr target =+ let found = readSTime False defaultTimeLocale formatStr target+ result = assertEqual "" expected found+ name = (show formatStr) ++ " of " ++ (show target)+ in Test.Tasty.HUnit.testCase name result++simpleFormatTests :: TestTree+simpleFormatTests =+ testGroup+ "simple"+ [ testReadSTime [(epoch, "")] "" "",+ testReadSTime [(epoch, " ")] "" " ",+ testReadSTime [(epoch, "")] " " " ",+ testReadSTime [(epoch, "")] " " " ",+ testReadSTime [(epoch, "")] "%k" "0",+ testReadSTime [(epoch, "")] "%k" " 0",+ testReadSTime [(epoch, "")] "%m" "01",+ testReadSTime [(epoch, " ")] "%m" "01 ",+ testReadSTime [(epoch, " ")] " %m" " 01 ",+ testReadSTime [(epoch, "")] " %m" " 01",+ -- https://ghc.haskell.org/trac/ghc/ticket/9150+ testReadSTime [(epoch, "")] " %M" " 00",+ testReadSTime [(epoch, "")] "%M " "00 ",+ testReadSTime [(epoch, "")] "%Q" "",+ testReadSTime [(epoch, " ")] "%Q" " ",+ testReadSTime [(epoch, "X")] "%Q" "X",+ testReadSTime [(epoch, " X")] "%Q" " X",+ testReadSTime [(epoch, "")] "%Q " " ",+ testReadSTime [(epoch, "")] "%Q X" " X",+ testReadSTime [(epoch, "")] "%QX" "X"+ ]++spacingForFormatTests :: (Show t, Eq t, ParseTime t) => t -> String -> String -> TestTree+spacingForFormatTests expected formatStr target =+ testGroup+ formatStr+ [ parseTest False (Just expected) formatStr target,+ parseTest True (Just expected) formatStr target,+ parseTest False (Just expected) (formatStr ++ " ") (target ++ " "),+ parseTest True (Just expected) (formatStr ++ " ") (target ++ " "),+ parseTest False (Just expected) (" " ++ formatStr) (" " ++ target),+ parseTest True (Just expected) (" " ++ formatStr) (" " ++ target),+ parseTest True (Just expected) ("" ++ formatStr) (" " ++ target),+ parseTest True (Just expected) (" " ++ formatStr) (" " ++ target)+ ]++spacingTests :: TestTree+spacingTests =+ testGroup+ "spacing"+ [ spacingForFormatTests epoch "%Q" "",+ spacingForFormatTests epoch "%Q" ".0",+ spacingForFormatTests epoch "%k" " 0",+ spacingForFormatTests epoch "%M" "00",+ spacingForFormatTests epoch "%m" "01",+ spacingForFormatTests (TimeZone 120 False "") "%z" "+0200",+ spacingForFormatTests (TimeZone 120 False "") "%Z" "+0200",+ spacingForFormatTests (TimeZone (-480) False "PST") "%Z" "PST"+ ]++particularParseTests :: TestTree+particularParseTests =+ testGroup+ "particular"+ [ parseTest @Day True Nothing "%-d%-m%0Y" "2122012", -- ISSUE #232+ parseTest @Day True Nothing "%-d%-m%0Y" "2132012" -- ISSUE #232+ ]++badParseTests :: TestTree+badParseTests = testGroup "bad" [parseTest False (Nothing :: Maybe Day) "%Y" ""]++{-+parseYMD :: Day -> TestTree+parseYMD day = case toGregorian day of+ (y, m, d) -> parseTest False (Just day) "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))+-}++parseYearDayD :: Day -> TestTree+parseYearDayD day = case toGregorian day of+ (y, m, d) -> parseTest False (Just day) "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))++parseYearDayE :: Day -> TestTree+parseYearDayE day = case toGregorian day of+ (y, m, d) -> parseTest False (Just day) "%Y %-m %e" ((show y) ++ " " ++ (show m) ++ " " ++ (show d))++-- | 1969 - 2068+expectedYear :: Integer -> Integer+expectedYear i | i >= 69 = 1900 + i+expectedYear i = 2000 + i++show2 :: (Show n, Integral n) => n -> String+show2 i = (show (div i 10)) ++ (show (mod i 10))++parseYY :: Integer -> TestTree+parseYY i = parseTest False (Just (fromGregorian (expectedYear i) 1 1)) "%y" (show2 i)++parseCYY :: Integer -> Integer -> TestTree+parseCYY c i = parseTest False (Just (fromGregorian ((c * 100) + i) 1 1)) "%-C %y" ((show c) ++ " " ++ (show2 i))++parseCYY2 :: Integer -> Integer -> TestTree+parseCYY2 c i = parseTest False (Just (fromGregorian ((c * 100) + i) 1 1)) "%C %y" ((show2 c) ++ " " ++ (show2 i))++parseCentury :: String -> Integer -> TestTree+parseCentury int c =+ parseTest False (Just (fromGregorian (c * 100) 1 1)) ("%-C" ++ int ++ "%y") ((show c) ++ int ++ "00")++parseTest :: forall t. (Show t, Eq t, ParseTime t) => Bool -> Maybe t -> String -> String -> TestTree+parseTest sp expected formatStr target =+ let found = parse sp formatStr target+ result = assertEqual "" expected found+ name =+ (show formatStr)+ ++ " of "+ ++ (show target)+ ++ ( if sp+ then " allowing spaces"+ else ""+ )+ in Test.Tasty.HUnit.testCase name result++enumAdd :: (Enum a) => Int -> a -> a+enumAdd i a = toEnum (i + fromEnum a)++getMilZoneLetter :: Int -> Char+getMilZoneLetter 0 = 'Z'+getMilZoneLetter h | h < 0 = enumAdd (negate h) 'M'+getMilZoneLetter h | h < 10 = enumAdd (h - 1) 'A'+getMilZoneLetter h = enumAdd (h - 10) 'K'++getMilZone :: Int -> TimeZone+getMilZone hour = TimeZone (hour * 60) False [getMilZoneLetter hour]++testParseTimeZone :: TimeZone -> TestTree+testParseTimeZone tz = parseTest False (Just tz) "%Z" (timeZoneName tz)++defaultTimeZoneTests :: TestTree+defaultTimeZoneTests = testGroup "default time zones" (fmap testParseTimeZone (knownTimeZones defaultTimeLocale))++militaryTimeZoneTests :: TestTree+militaryTimeZoneTests = testGroup "military time zones" (fmap (testParseTimeZone . getMilZone) [-12 .. 12])++-- missing from the time package+instance Eq ZonedTime where+ ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2++compareResult' :: (Eq a, Show a) => String -> a -> a -> Result+compareResult' extra expected found+ | expected == found = succeeded+ | otherwise = failed {reason = "expected " ++ (show expected) ++ ", found " ++ (show found) ++ extra}++compareResult :: (Eq a, Show a) => a -> a -> Result+compareResult = compareResult' ""++compareParse ::+ forall a.+ (Eq a, Show a, ParseTime a) =>+ a ->+ String ->+ String ->+ Result+compareParse expected fmt text = compareResult' (", parsing " ++ (show text)) (Just expected) (parse False fmt text)++--++-- * tests for debugging failing cases++--+test_parse_format :: (FormatTime t, ParseTime t, Show t) => String -> t -> (String, String, Maybe t)+test_parse_format f t =+ let s = format f t+ in (show t, s, parse False f s `asTypeOf` Just t)++--++-- * show and read++--+reads_expect :: a -> [(a, String)]+reads_expect t = [(t, "")]++prop_read_show :: (Read a, Show a, Eq a) => a -> Result+prop_read_show t = compareResult (reads_expect t) (reads (show t))++prop_read_show_ZonedUTC :: ZonedTime -> Result+prop_read_show_ZonedUTC t = compareResult (reads_expect $ zonedTimeToUTC t) (reads (show t))++prop_read_show_LocalUTC :: LocalTime -> Result+prop_read_show_LocalUTC t = compareResult (reads_expect $ localTimeToUTC utc t) (reads (show t))++prop_read_show_UTC_no_TZ :: UTCTime -> Result+prop_read_show_UTC_no_TZ t = compareResult (reads_expect t) $ reads $ show $ utcToLocalTime utc t++--++-- * special show functions++--+prop_parse_showWeekDate :: Day -> Result+prop_parse_showWeekDate d = compareParse d "%G-W%V-%u" (showWeekDate d)++prop_parse_showGregorian :: Day -> Result+prop_parse_showGregorian d = compareParse d "%Y-%m-%d" (showGregorian d)++prop_parse_showOrdinalDate :: Day -> Result+prop_parse_showOrdinalDate d = compareParse d "%Y-%j" (showOrdinalDate d)++--++-- * fromMondayStartWeek and fromSundayStartWeek++--+prop_fromMondayStartWeek :: Day -> Result+prop_fromMondayStartWeek d =+ let (w, wd) = mondayStartWeek d+ (y, _, _) = toGregorian d+ in compareResult d (fromMondayStartWeek y w wd)++prop_fromSundayStartWeek :: Day -> Result+prop_fromSundayStartWeek d =+ let (w, wd) = sundayStartWeek d+ (y, _, _) = toGregorian d+ in compareResult d (fromSundayStartWeek y w wd)++-- t == parse (format t)+prop_parse_format :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result+prop_parse_format (FormatString f) t = compareParse t f (format f t)++-- t == parse (upper (format t))+prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result+prop_parse_format_upper (FormatString f) t = compareParse t f (map toUpper $ format f t)++-- t == parse (lower (format t))+prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result+prop_parse_format_lower (FormatString f) t = compareParse t f (map toLower $ format f t)++-- Default time is 1970-01-01 00:00:00 +0000 (which was a Thursday)+in1970 :: Maybe String -> Char -> String -> Maybe String+in1970 _ 'j' "366" = Nothing -- 1970 was not a leap year+in1970 _ 'U' "53" = Nothing -- last day of 1970 was Sunday-start-week 52+in1970 _ 'W' "53" = Nothing -- last day of 1970 was Monday-start-week 52+in1970 (Just s) 'S' "60" = Just s -- no leap second without other data+in1970 _ _ s = Just s++-- format t == format (parse (format t))+prop_format_parse_format ::+ forall t.+ (HasFormatCodes t, FormatTime t, ParseTime t) =>+ Proxy t ->+ FormatCode ParseAndFormat t ->+ t ->+ Result+prop_format_parse_format _ fc v =+ let s1 = formatCode fc v+ ms1 = in1970 (fmap (formatCode fc) (incompleteS :: Maybe t)) (fcSpecifier fc) s1+ mv2 :: Maybe t+ mv2 = parseCode fc s1+ ms2 = fmap (formatCode fc) mv2+ in compareResult ms1 ms2++instance HasFormatCodes Day where+ allFormatCodes _ = [(False, s) | s <- "DFxYyCBbhmdejfVUW"]++instance HasFormatCodes TimeOfDay where+ allFormatCodes _ = [(False, s) | s <- "RTXrPpHkIlMSqQ"]++instance HasFormatCodes DayOfWeek where+ allFormatCodes _ = [(False, s) | s <- "uwaA"]++instance HasFormatCodes Month where+ allFormatCodes _ = [(False, s) | s <- "YyCBbhm"]++instance HasFormatCodes QuarterOfYear where+ allFormatCodes _ = [(False, s) | s <- "v"]++instance HasFormatCodes Quarter where+ allFormatCodes _ = allFormatCodes (Proxy :: Proxy QuarterOfYear) ++ [(False, s) | s <- "YyC"]++instance HasFormatCodes LocalTime where+ allFormatCodes _ = allFormatCodes (Proxy :: Proxy Day) ++ allFormatCodes (Proxy :: Proxy TimeOfDay)++instance HasFormatCodes TimeZone where+ allFormatCodes _ = [(a, s) | a <- [False, True], s <- "zZ"]++instance HasFormatCodes ZonedTime where+ allFormatCodes _ =+ [(False, s) | s <- "cs"]+ ++ allFormatCodes (Proxy :: Proxy LocalTime)+ ++ allFormatCodes (Proxy :: Proxy TimeZone)++instance HasFormatCodes UTCTime where+ allFormatCodes _ = [(False, s) | s <- "cs"] ++ allFormatCodes (Proxy :: Proxy LocalTime)+ incompleteS = Just $ UTCTime (fromGregorian 2000 1 1) 0++instance HasFormatCodes UniversalTime where+ allFormatCodes _ = allFormatCodes (Proxy :: Proxy LocalTime)++--++-- * crashes in parse++--+newtype Input+ = Input String++instance Show Input where+ show (Input s) = s++instance Arbitrary Input where+ arbitrary = liftM Input $ list cs+ where+ cs = elements (['0' .. '9'] ++ ['-', ' ', '/'] ++ ['a' .. 'z'] ++ ['A' .. 'Z'])+ list g = sized (\n -> choose (0, n) >>= \l -> replicateM l g)++instance CoArbitrary Input where+ coarbitrary (Input s) = coarbitrary (sum (map ord s))++prop_no_crash_bad_input :: (Eq t, ParseTime t) => FormatString t -> Input -> Property+prop_no_crash_bad_input fs@(FormatString f) (Input s) =+ property $+ case parse False f s of+ Nothing -> True+ Just t -> t == t `asTypeOf` formatType fs++--+--+--+newtype FormatString a+ = FormatString String++formatType :: FormatString t -> t+formatType _ = undefined++instance Show (FormatString a) where+ show (FormatString f) = show f++typedTests :: (forall t. (Eq t, FormatTime t, ParseTime t, Show t) => FormatString t -> t -> Result) -> [TestTree]+typedTests prop =+ [ nameTest "Day" $ tgroup dayFormats prop,+ -- TODO: nameTest "Month" $ tgroup monthFormats prop,+ -- TODO: nameTest "Quarter" $ tgroup quarterFormats prop,+ nameTest "TimeOfDay" $ tgroup timeOfDayFormats prop,+ nameTest "LocalTime" $ tgroup localTimeFormats prop,+ nameTest "TimeZone" $ tgroup timeZoneFormats prop,+ nameTest "ZonedTime" $ tgroup zonedTimeFormats prop,+ nameTest "ZonedTime" $+ tgroup zonedTimeAlmostFormats $+ \fmt t -> (todSec $ localTimeOfDay $ zonedTimeToLocalTime t) < 60 ==> prop fmt t,+ nameTest "UTCTime" $ tgroup utcTimeAlmostFormats $ \fmt t -> utctDayTime t < 86400 ==> prop fmt t,+ nameTest "UniversalTime" $ tgroup universalTimeFormats prop+ -- TODO: nameTest "CalendarDiffDays" $ tgroup calendarDiffDaysFormats prop,+ -- TODO: nameTest "CalendarDiffTime" $ tgroup calendarDiffTimeFormats prop,+ -- TODO: nameTest "DiffTime" $ tgroup diffTimeFormats prop,+ -- TODO: nameTest "NominalDiffTime" $ tgroup nominalDiffTimeFormats prop+ ]++allTypes ::+ (forall t. (Eq t, Show t, Arbitrary t, FormatTime t, ParseTime t, HasFormatCodes t) => String -> Proxy t -> r) ->+ [r]+allTypes f =+ [ f "Day" (Proxy :: Proxy Day),+ f "TimeOfDay" (Proxy :: Proxy TimeOfDay),+ -- TODO: f "DayOfWeek" (Proxy :: Proxy DayOfWeek),+ -- TODO: f "Month" (Proxy :: Proxy Month),+ -- TODO: f "QuarterOfYear" (Proxy :: Proxy QuarterOfYear),+ -- TODO: f "Quarter" (Proxy :: Proxy Quarter),+ f "LocalTime" (Proxy :: Proxy LocalTime),+ f "TimeZone" (Proxy :: Proxy TimeZone),+ f "ZonedTime" (Proxy :: Proxy ZonedTime),+ f "UTCTime" (Proxy :: Proxy UTCTime),+ f "UniversalTime" (Proxy :: Proxy UniversalTime)+ ]++allLeapSecondTypes ::+ (forall t. (Eq t, Show t, Arbitrary t, FormatTime t, ParseTime t, HasFormatCodes t) => String -> t -> r) ->+ [r]+allLeapSecondTypes f =+ let day :: Day+ day = fromGregorian 2000 01 01+ lsTimeOfDay :: TimeOfDay+ lsTimeOfDay = TimeOfDay 23 59 60.5+ lsLocalTime :: LocalTime+ lsLocalTime = LocalTime day lsTimeOfDay+ lsZonedTime :: ZonedTime+ lsZonedTime = ZonedTime lsLocalTime utc+ lsUTCTime :: UTCTime+ lsUTCTime = UTCTime day 86400.5+ in [ f "TimeOfDay" lsTimeOfDay,+ f "LocalTime" lsLocalTime,+ f "ZonedTime" lsZonedTime,+ f "UTCTime" lsUTCTime+ ]++parseEmptyTest ::+ forall t.+ (ParseTime t) =>+ Proxy t ->+ Assertion+parseEmptyTest _ =+ case parse False "" "" :: Maybe t of+ Just _ -> return ()+ Nothing -> assertFailure "failed"++parseEmptyTests :: TestTree+parseEmptyTests = nameTest "parse empty" $ allTypes $ \name p -> nameTest name $ parseEmptyTest p++class (Eq a, Show a, ParseTime a) => TestParse a where+ nonPosixValue :: a -> Bool+ nonPosixValue _ = False++instance TestParse UTCTime where+ nonPosixValue (UTCTime _ dt) = dt >= 86400 || dt < 0++instance TestParse ZonedTime where+ nonPosixValue (ZonedTime t _) = nonPosixValue t++instance TestParse TimeZone++instance TestParse LocalTime where+ nonPosixValue (LocalTime _ t) = nonPosixValue t++instance TestParse Day++-- TODO: instance TestParse Month++-- TODO: instance TestParse DayOfWeek++instance TestParse TimeOfDay where+ nonPosixValue (TimeOfDay _ _ s) = s >= 60 || s < 0++prop_parse_s :: forall a. (TestParse a) => (UTCTime -> a) -> UTCTime -> Result+prop_parse_s f t =+ if nonPosixValue t+ then succeeded+ else+ let str = format "%s%Q" t+ found = parse False "%s%Q" str+ expected = f t+ in compareResult (Just expected) found++prop_parse_sz :: forall a. (TestParse a) => (ZonedTime -> a) -> ZonedTime -> Result+prop_parse_sz f t =+ if nonPosixValue t+ then succeeded+ else+ let str = format "%s%Q %z" t+ found = parse False "%s%Q %z" str+ expected = f t+ in compareResult (Just expected) found++zeroTimeZone :: TimeZone+zeroTimeZone = TimeZone 0 False ""++parse_s_tests :: TestTree+parse_s_tests =+ nameTest+ "parse_s"+ [ nameTest "UTCTime" $ prop_parse_s @UTCTime id,+ nameTest "ZonedTime" $ prop_parse_s @ZonedTime $ utcToZonedTime zeroTimeZone,+ nameTest "TimeZone" $ prop_parse_s @TimeZone $ \_ -> zeroTimeZone,+ nameTest "LocalTime" $ prop_parse_s @LocalTime $ utcToLocalTime zeroTimeZone,+ nameTest "Day" $ prop_parse_s @Day utctDay,+ -- TODO: nameTest "Month" $ prop_parse_s @Month $ (\(MonthDay m _) -> m) . utctDay,+ -- TODO: nameTest "DayOfWeek" $ prop_parse_s @DayOfWeek $ dayOfWeek . utctDay,+ nameTest "TimeOfDay" $ prop_parse_s @TimeOfDay $ localTimeOfDay . utcToLocalTime zeroTimeZone+ ]++parse_sz_tests :: TestTree+parse_sz_tests =+ nameTest+ "parse_sz"+ [ nameTest "UTCTime" $ prop_parse_sz @UTCTime zonedTimeToUTC,+ nameTest "ZonedTime" $ prop_parse_sz @ZonedTime id,+ nameTest "TimeZone" $ prop_parse_sz @TimeZone zonedTimeZone,+ nameTest "LocalTime" $ prop_parse_sz @LocalTime zonedTimeToLocalTime,+ nameTest "Day" $ prop_parse_sz @Day $ localDay . zonedTimeToLocalTime,+ -- TODO: nameTest "Month" $ prop_parse_sz @Month $ (\(MonthDay m _) -> m) . localDay . zonedTimeToLocalTime,+ -- TODO: nameTest "DayOfWeek" $ prop_parse_sz @DayOfWeek $ dayOfWeek . localDay . zonedTimeToLocalTime,+ nameTest "TimeOfDay" $ prop_parse_sz @TimeOfDay $ localTimeOfDay . zonedTimeToLocalTime+ ]++formatParseFormatTests :: TestTree+formatParseFormatTests =+ nameTest+ "format_parse_format"+ [ localOption (QuickCheckTests 50000) $+ nameTest "general" $+ allTypes $+ \name p -> nameTest name $ prop_format_parse_format p,+ nameTest "#177" $+ [ nameTest "start" $ \fc -> prop_format_parse_format Proxy fc (fst supportedDayRange),+ nameTest "end" $ \fc -> prop_format_parse_format Proxy fc (snd supportedDayRange)+ ],+ nameTest "leapsecond" $ allLeapSecondTypes $ \name t -> nameTest name $ \fc -> prop_format_parse_format Proxy fc t+ ]++badInputTests :: TestTree+badInputTests =+ nameTest+ "no_crash_bad_input"+ [ nameTest "Day" $ tgroup (dayFormats ++ partialDayFormats ++ failingPartialDayFormats) prop_no_crash_bad_input,+ nameTest "TimeOfDay" $ tgroup (timeOfDayFormats ++ partialTimeOfDayFormats) prop_no_crash_bad_input,+ nameTest "LocalTime" $ tgroup (localTimeFormats ++ partialLocalTimeFormats) prop_no_crash_bad_input,+ nameTest "TimeZone" $ tgroup (timeZoneFormats) prop_no_crash_bad_input,+ nameTest "ZonedTime" $+ tgroup (zonedTimeFormats ++ zonedTimeAlmostFormats ++ partialZonedTimeFormats) prop_no_crash_bad_input,+ nameTest "UTCTime" $ tgroup (utcTimeAlmostFormats ++ partialUTCTimeFormats) prop_no_crash_bad_input,+ nameTest "UniversalTime" $+ tgroup (universalTimeFormats ++ partialUniversalTimeFormats) prop_no_crash_bad_input+ ]++readShowTests :: TestTree+readShowTests =+ nameTest+ "read_show"+ [ nameTest "Day" (prop_read_show :: Day -> Result),+ nameTest "Month" (prop_read_show :: Month -> Result),+ nameTest "QuarterOfYear" (prop_read_show :: QuarterOfYear -> Result),+ nameTest "Quarter" (prop_read_show :: Quarter -> Result),+ nameTest "TimeOfDay" (prop_read_show :: TimeOfDay -> Result),+ nameTest "LocalTime" (prop_read_show :: LocalTime -> Result),+ nameTest "TimeZone" (prop_read_show :: TimeZone -> Result),+ nameTest "ZonedTime" (prop_read_show :: ZonedTime -> Result),+ nameTest "UTCTime" (prop_read_show :: UTCTime -> Result),+ nameTest "UTCTime (zoned)" prop_read_show_ZonedUTC,+ nameTest "UTCTime (local)" prop_read_show_LocalUTC,+ nameTest "UTCTime (no TZ)" prop_read_show_UTC_no_TZ,+ nameTest "UniversalTime" (prop_read_show :: UniversalTime -> Result),+ nameTest "NominalDiffTime" (prop_read_show :: NominalDiffTime -> Result),+ nameTest "DiffTime" (prop_read_show :: DiffTime -> Result)+ -- TODO: nameTest "CalendarDiffDays" (prop_read_show :: CalendarDiffDays -> Result),+ -- TODO: nameTest "CalendarDiffTime" (prop_read_show :: CalendarDiffTime -> Result)+ ]++parseShowTests :: TestTree+parseShowTests =+ nameTest+ "parse_show"+ [ nameTest "showWeekDate" prop_parse_showWeekDate,+ nameTest "showGregorian" prop_parse_showGregorian,+ nameTest "showOrdinalDate" prop_parse_showOrdinalDate+ ]++propertyTests :: TestTree+propertyTests =+ localOption (QuickCheckTests 2000) $+ nameTest+ "properties"+ [ readShowTests,+ parseShowTests,+ nameTest "fromMondayStartWeek" prop_fromMondayStartWeek,+ nameTest "fromSundayStartWeek" prop_fromSundayStartWeek,+ nameTest "parse_format" $ typedTests prop_parse_format,+ nameTest "parse_format_lower" $ typedTests prop_parse_format_lower,+ nameTest "parse_format_upper" $ typedTests prop_parse_format_upper,+ parseEmptyTests,+ parse_s_tests,+ parse_sz_tests,+ formatParseFormatTests,+ badInputTests+ ]++dayFormats :: [FormatString Day]+dayFormats =+ map+ FormatString+ -- numeric year, month, day+ [ "%Y-%m-%d",+ "%Y%m%d",+ "%C%y%m%d",+ "%Y %m %e",+ "%m/%d/%Y",+ "%d/%m/%Y",+ "%Y/%d/%m",+ "%D %C",+ "%F",+ -- month names+ "%Y-%B-%d",+ "%Y-%b-%d",+ "%Y-%h-%d",+ "%C-%y-%B-%d",+ "%C-%y-%b-%d",+ "%C-%y-%h-%d",+ -- ordinal dates+ "%Y-%j",+ "%C-%y-%j",+ -- ISO week dates+ "%G-%V-%u",+ "%G-%V-%a",+ "%G-%V-%A",+ "%G-%V-%w",+ "%A week %V, %G",+ "day %V, week %A, %G",+ "%G-W%V-%u",+ "%f%g-%V-%u",+ "%f%g-%V-%a",+ "%f%g-%V-%A",+ "%f%g-%V-%w",+ "%A week %V, %f%g",+ "day %V, week %A, %f%g",+ "%f%g-W%V-%u",+ -- monday and sunday week dates+ "%Y-w%U-%A",+ "%Y-w%W-%A",+ "%Y-%A-w%U",+ "%Y-%A-w%W",+ "%A week %U, %Y",+ "%A week %W, %Y"+ ]++monthFormats :: [FormatString Month]+monthFormats =+ map+ FormatString+ -- numeric year, month+ [ "%Y-%m",+ "%Y%m",+ "%C%y%m",+ "%Y %m",+ "%m/%Y",+ "%m/%Y",+ "%Y/%m",+ "%C %y %m",+ -- month names+ "%Y-%B",+ "%Y-%b",+ "%Y-%h",+ "%C-%y-%B",+ "%C-%y-%b",+ "%C-%y-%h"+ ]++quarterFormats :: [FormatString Quarter]+quarterFormats =+ map+ FormatString+ -- numeric year, quarter+ [ "%Y-%v",+ "%Y-Q%v",+ "%YQ%v",+ "%C%y%v",+ "%Y %v",+ "%v/%Y",+ "%v/%Y",+ "%Y/%vm",+ "%C %y %v"+ ]++timeOfDayFormats :: [FormatString TimeOfDay]+timeOfDayFormats =+ map+ FormatString+ -- 24 h formats+ [ "%H:%M:%S.%q",+ "%k:%M:%S.%q",+ "%H%M%S.%q",+ "%T.%q",+ "%X.%q",+ "%R:%S.%q",+ "%H:%M:%S%Q",+ "%k:%M:%S%Q",+ "%H%M%S%Q",+ "%T%Q",+ "%X%Q",+ "%R:%S%Q",+ -- 12 h formats+ "%I:%M:%S.%q %p",+ "%I:%M:%S.%q %P",+ "%l:%M:%S.%q %p",+ "%r %q",+ "%I:%M:%S%Q %p",+ "%I:%M:%S%Q %P",+ "%l:%M:%S%Q %p",+ "%r %Q"+ ]++localTimeFormats :: [FormatString LocalTime]+localTimeFormats = map FormatString [] {-"%Q","%Q ","%QX"-}++timeZoneFormats :: [FormatString TimeZone]+timeZoneFormats = map FormatString ["%z", "%z%Z", "%Z%z", "%Z", "%Ez", "%EZ"]++zonedTimeFormats :: [FormatString ZonedTime]+zonedTimeFormats =+ map+ FormatString+ [ "%a, %d %b %Y %H:%M:%S.%q %z",+ "%a, %d %b %Y %H:%M:%S%Q %z",+ "%a, %d %b %Y %H:%M:%S.%q %Z",+ "%a, %d %b %Y %H:%M:%S%Q %Z"+ ]++zonedTimeAlmostFormats :: [FormatString ZonedTime]+zonedTimeAlmostFormats = map FormatString ["%s.%q %z", "%s%Q %z", "%s.%q %Z", "%s%Q %Z"]++utcTimeAlmostFormats :: [FormatString UTCTime]+utcTimeAlmostFormats = map FormatString ["%s.%q", "%s%Q"]++universalTimeFormats :: [FormatString UniversalTime]+universalTimeFormats = map FormatString []++calendarDiffDaysFormats :: [FormatString CalendarDiffDays]+calendarDiffDaysFormats = map FormatString ["%yy%Bm%ww%Dd", "%yy%Bm%dd", "%bm%ww%Dd", "%bm%dd"]++calendarDiffTimeFormats :: [FormatString CalendarDiffTime]+calendarDiffTimeFormats =+ map+ FormatString+ [ "%yy%Bm%ww%Dd%Hh%Mm%ESs",+ "%bm%ww%Dd%Hh%Mm%ESs",+ "%bm%dd%Hh%Mm%ESs",+ "%bm%hh%Mm%ESs",+ "%bm%mm%ESs",+ "%bm%mm%0ESs",+ "%bm%Ess",+ "%bm%0Ess"+ ]++diffTimeFormats :: [FormatString DiffTime]+diffTimeFormats =+ map FormatString ["%ww%Dd%Hh%Mm%ESs", "%dd%Hh%Mm%ESs", "%hh%Mm%ESs", "%mm%ESs", "%mm%0ESs", "%Ess", "%0Ess"]++nominalDiffTimeFormats :: [FormatString NominalDiffTime]+nominalDiffTimeFormats =+ map FormatString ["%ww%Dd%Hh%Mm%ESs", "%dd%Hh%Mm%ESs", "%hh%Mm%ESs", "%mm%ESs", "%mm%0ESs", "%Ess", "%0Ess"]++--++-- * Formats that do not include all the information++--+partialDayFormats :: [FormatString Day]+partialDayFormats = map FormatString []++partialTimeOfDayFormats :: [FormatString TimeOfDay]+partialTimeOfDayFormats = map FormatString ["%H", "%M", "%S", "%H:%M"]++partialLocalTimeFormats :: [FormatString LocalTime]+partialLocalTimeFormats = map FormatString []++partialZonedTimeFormats :: [FormatString ZonedTime]+partialZonedTimeFormats =+ map+ FormatString+ -- %s does not include second decimals+ [ "%s %z",+ -- %S does not include second decimals+ "%c",+ "%a, %d %b %Y %H:%M:%S %Z"+ ]++partialUTCTimeFormats :: [FormatString UTCTime]+partialUTCTimeFormats =+ map+ FormatString+ -- %s does not include second decimals+ [ "%s",+ -- %c does not include second decimals+ "%c"+ ]++partialUniversalTimeFormats :: [FormatString UniversalTime]+partialUniversalTimeFormats = map FormatString []++failingPartialDayFormats :: [FormatString Day]+failingPartialDayFormats =+ map+ FormatString+ -- ISO week dates with two digit year.+ -- This can fail in the beginning or the end of a year where+ -- the ISO week date year does not match the gregorian year.+ ["%g-%V-%u", "%g-%V-%a", "%g-%V-%A", "%g-%V-%w", "%A week %V, %g", "day %V, week %A, %g", "%g-W%V-%u"]
test/main/Test/LocalTime/CalendarDiffTime.hs view
@@ -1,6 +1,7 @@-module Test.LocalTime.CalendarDiffTime (- testCalendarDiffTime,-) where+module Test.LocalTime.CalendarDiffTime+ ( testCalendarDiffTime,+ )+where import Data.Time.Compat import Test.Arbitrary ()@@ -10,27 +11,11 @@ testReadShowExact :: (Read a, Show a, Eq a) => String -> a -> TestTree testReadShowExact t v =- nameTest- t- [ nameTest "show" $ assertEqual "show" t $ show v- , nameTest "read" $ assertEqual "read" v $ read t- ]+ nameTest+ t+ [ nameTest "show" $ assertEqual "show" t $ show v,+ nameTest "read" $ assertEqual "read" v $ read t+ ] testCalendarDiffTime :: TestTree-testCalendarDiffTime = testGroup "CalendarDiffTime" []-{-- nameTest- "CalendarDiffTime"- [ testReadShowExact "P0D" $ CalendarDiffTime 0 0- , testReadShowExact "P1DT1S" $ CalendarDiffTime 0 $ secondsToNominalDiffTime 86401- , testReadShowExact "P-1DT1S" $ CalendarDiffTime 0 $ secondsToNominalDiffTime $ negate 86399- , testReadShowExact "P-1D" $ CalendarDiffTime 0 $ secondsToNominalDiffTime $ negate 86400- , testReadShowExact "P-2DT23H59M59S" $ CalendarDiffTime 0 $ secondsToNominalDiffTime $ negate 86401- , testReadShowExact "P1M-1DT1S" $ CalendarDiffTime 1 $ secondsToNominalDiffTime $ negate 86399- , testReadShowExact "P1M-1D" $ CalendarDiffTime 1 $ secondsToNominalDiffTime $ negate 86400- , testReadShowExact "P1M-2DT23H59M59S" $ CalendarDiffTime 1 $ secondsToNominalDiffTime $ negate 86401- , testReadShowExact "P-1Y-1M-1DT1S" $ CalendarDiffTime (-13) $ secondsToNominalDiffTime $ negate 86399- , testReadShowExact "P-1Y-1M-1D" $ CalendarDiffTime (-13) $ secondsToNominalDiffTime $ negate 86400- , testReadShowExact "P-1Y-1M-2DT23H59M59S" $ CalendarDiffTime (-13) $ secondsToNominalDiffTime $ negate 86401- ]--}+testCalendarDiffTime = testGroup "CalendarDiffTime" [] -- No Read
test/main/Test/LocalTime/Time.hs view
@@ -1,56 +1,55 @@-module Test.LocalTime.Time (- testTime,-) where+module Test.LocalTime.Time+ ( testTime,+ )+where -import Data.Time.Compat import Data.Time.Calendar.OrdinalDate.Compat import Data.Time.Calendar.WeekDate.Compat+import Data.Time.Compat import Test.LocalTime.TimeRef import Test.Tasty import Test.Tasty.HUnit showCal :: Integer -> String showCal mjd =- let- date = ModifiedJulianDay mjd- (y, m, d) = toGregorian date- date' = fromGregorian y m d- in- concat- [ show mjd ++ "=" ++ showGregorian date ++ "=" ++ showOrdinalDate date ++ "=" ++ showWeekDate date ++ "\n"- , if date == date'- then ""- else "=" ++ (show $ toModifiedJulianDay date') ++ "!"- ]+ let date = ModifiedJulianDay mjd+ (y, m, d) = toGregorian date+ date' = fromGregorian y m d+ in concat+ [ show mjd ++ "=" ++ showGregorian date ++ "=" ++ showOrdinalDate date ++ "=" ++ showWeekDate date ++ "\n",+ if date == date'+ then ""+ else "=" ++ (show $ toModifiedJulianDay date') ++ "!"+ ] testCal :: String testCal =- concat- -- days around 1 BCE/1 CE- [ concatMap showCal [-678950 .. -678930]- , -- days around 1000 CE- concatMap showCal [-313710 .. -313690]- , -- days around MJD zero- concatMap showCal [-30 .. 30]- , showCal 40000- , showCal 50000- , -- 1900 not a leap year- showCal 15078- , showCal 15079- , -- 1980 is a leap year- showCal 44297- , showCal 44298- , showCal 44299- , -- 1990 not a leap year- showCal 47950- , showCal 47951- , -- 2000 is a leap year- showCal 51602- , showCal 51603- , showCal 51604- , -- years 2000 and 2001, plus some slop- concatMap showCal [51540 .. 52280]- ]+ concat+ -- days around 1 BCE/1 CE+ [ concatMap showCal [-678950 .. -678930],+ -- days around 1000 CE+ concatMap showCal [-313710 .. -313690],+ -- days around MJD zero+ concatMap showCal [-30 .. 30],+ showCal 40000,+ showCal 50000,+ -- 1900 not a leap year+ showCal 15078,+ showCal 15079,+ -- 1980 is a leap year+ showCal 44297,+ showCal 44298,+ showCal 44299,+ -- 1990 not a leap year+ showCal 47950,+ showCal 47951,+ -- 2000 is a leap year+ showCal 51602,+ showCal 51603,+ showCal 51604,+ -- years 2000 and 2001, plus some slop+ concatMap showCal [51540 .. 52280]+ ] showUTCTime :: UTCTime -> String showUTCTime (UTCTime d t) = show (toModifiedJulianDay d) ++ "," ++ show t@@ -66,11 +65,9 @@ testUTC :: String testUTC =- let- lsMineCal = utcToLocalTime myzone leapSec1998- lsMine = localTimeToUTC myzone lsMineCal- in- unlines [showCal 51178, show leapSec1998Cal, showUTCTime leapSec1998, show lsMineCal, showUTCTime lsMine]+ let lsMineCal = utcToLocalTime myzone leapSec1998+ lsMine = localTimeToUTC myzone lsMineCal+ in unlines [showCal 51178, show leapSec1998Cal, showUTCTime leapSec1998, show lsMineCal, showUTCTime lsMine] neglong :: Rational neglong = -120@@ -80,30 +77,28 @@ testUT1 :: String testUT1 =- unlines- [ show $ ut1ToLocalTime 0 $ ModJulianDate 51604.0- , show $ ut1ToLocalTime 0 $ ModJulianDate 51604.5- , show $ ut1ToLocalTime neglong $ ModJulianDate 51604.0- , show $ ut1ToLocalTime neglong $ ModJulianDate 51604.5- , show $ ut1ToLocalTime poslong $ ModJulianDate 51604.0- , show $ ut1ToLocalTime poslong $ ModJulianDate 51604.5- ]+ unlines+ [ show $ ut1ToLocalTime 0 $ ModJulianDate 51604.0,+ show $ ut1ToLocalTime 0 $ ModJulianDate 51604.5,+ show $ ut1ToLocalTime neglong $ ModJulianDate 51604.0,+ show $ ut1ToLocalTime neglong $ ModJulianDate 51604.5,+ show $ ut1ToLocalTime poslong $ ModJulianDate 51604.0,+ show $ ut1ToLocalTime poslong $ ModJulianDate 51604.5+ ] testTimeOfDayToDayFraction :: String testTimeOfDayToDayFraction =- let- f = dayFractionToTimeOfDay . timeOfDayToDayFraction- in- unlines- [ show $ f $ TimeOfDay 12 34 56.789- , show $ f $ TimeOfDay 12 34 56.789123- , show $ f $ TimeOfDay 12 34 56.789123456- , show $ f $ TimeOfDay 12 34 56.789123456789- , show $ f $ TimeOfDay minBound 0 0- ]+ let f = dayFractionToTimeOfDay . timeOfDayToDayFraction+ in unlines+ [ show $ f $ TimeOfDay 12 34 56.789,+ show $ f $ TimeOfDay 12 34 56.789123,+ show $ f $ TimeOfDay 12 34 56.789123456,+ show $ f $ TimeOfDay 12 34 56.789123456789,+ show $ f $ TimeOfDay minBound 0 0+ ] testTime :: TestTree testTime =- testCase "testTime" $- assertEqual "times" testTimeRef $- unlines [testCal, testUTC, testUT1, testTimeOfDayToDayFraction]+ testCase "testTime" $+ assertEqual "times" testTimeRef $+ unlines [testCal, testUTC, testUT1, testTimeOfDayToDayFraction]
test/main/Test/LocalTime/TimeOfDay.hs view
@@ -1,6 +1,7 @@-module Test.LocalTime.TimeOfDay (- testTimeOfDay,-) where+module Test.LocalTime.TimeOfDay+ ( testTimeOfDay,+ )+where import Data.Time.LocalTime.Compat import Test.Arbitrary ()@@ -9,18 +10,14 @@ testTimeOfDay :: TestTree testTimeOfDay =- testGroup- "TimeOfDay"- [ testProperty "daysAndTimeOfDayToTime . timeToDaysAndTimeOfDay" $ \ndt ->- let- (d, tod) = timeToDaysAndTimeOfDay ndt- ndt' = daysAndTimeOfDayToTime d tod- in- ndt' == ndt- , testProperty "timeOfDayToTime . timeToTimeOfDay" $ \dt ->- let- tod = timeToTimeOfDay dt- dt' = timeOfDayToTime tod- in- dt' == dt- ]+ testGroup+ "TimeOfDay"+ [ testProperty "daysAndTimeOfDayToTime . timeToDaysAndTimeOfDay" $ \ndt ->+ let (d, tod) = timeToDaysAndTimeOfDay ndt+ ndt' = daysAndTimeOfDayToTime d tod+ in ndt' == ndt,+ testProperty "timeOfDayToTime . timeToTimeOfDay" $ \dt ->+ let tod = timeToTimeOfDay dt+ dt' = timeOfDayToTime tod+ in dt' == dt+ ]
test/main/Test/LocalTime/TimeRef.hs view
@@ -4,893 +4,893 @@ is64Bit :: Bool is64Bit =- if toInteger (maxBound :: Int) == toInteger (maxBound :: Int32)- then False- else- if toInteger (maxBound :: Int) == toInteger (maxBound :: Int64)- then True- else error "unrecognised Int size"--testTimeRef :: String-testTimeRef =- unlines- [ "-678950=-0001-12-23=-0001-357=-0001-W51-4"- , "-678949=-0001-12-24=-0001-358=-0001-W51-5"- , "-678948=-0001-12-25=-0001-359=-0001-W51-6"- , "-678947=-0001-12-26=-0001-360=-0001-W51-7"- , "-678946=-0001-12-27=-0001-361=-0001-W52-1"- , "-678945=-0001-12-28=-0001-362=-0001-W52-2"- , "-678944=-0001-12-29=-0001-363=-0001-W52-3"- , "-678943=-0001-12-30=-0001-364=-0001-W52-4"- , "-678942=-0001-12-31=-0001-365=-0001-W52-5"- , "-678941=0000-01-01=0000-001=-0001-W52-6"- , "-678940=0000-01-02=0000-002=-0001-W52-7"- , "-678939=0000-01-03=0000-003=0000-W01-1"- , "-678938=0000-01-04=0000-004=0000-W01-2"- , "-678937=0000-01-05=0000-005=0000-W01-3"- , "-678936=0000-01-06=0000-006=0000-W01-4"- , "-678935=0000-01-07=0000-007=0000-W01-5"- , "-678934=0000-01-08=0000-008=0000-W01-6"- , "-678933=0000-01-09=0000-009=0000-W01-7"- , "-678932=0000-01-10=0000-010=0000-W02-1"- , "-678931=0000-01-11=0000-011=0000-W02-2"- , "-678930=0000-01-12=0000-012=0000-W02-3"- , "-313710=0999-12-20=0999-354=0999-W51-5"- , "-313709=0999-12-21=0999-355=0999-W51-6"- , "-313708=0999-12-22=0999-356=0999-W51-7"- , "-313707=0999-12-23=0999-357=0999-W52-1"- , "-313706=0999-12-24=0999-358=0999-W52-2"- , "-313705=0999-12-25=0999-359=0999-W52-3"- , "-313704=0999-12-26=0999-360=0999-W52-4"- , "-313703=0999-12-27=0999-361=0999-W52-5"- , "-313702=0999-12-28=0999-362=0999-W52-6"- , "-313701=0999-12-29=0999-363=0999-W52-7"- , "-313700=0999-12-30=0999-364=1000-W01-1"- , "-313699=0999-12-31=0999-365=1000-W01-2"- , "-313698=1000-01-01=1000-001=1000-W01-3"- , "-313697=1000-01-02=1000-002=1000-W01-4"- , "-313696=1000-01-03=1000-003=1000-W01-5"- , "-313695=1000-01-04=1000-004=1000-W01-6"- , "-313694=1000-01-05=1000-005=1000-W01-7"- , "-313693=1000-01-06=1000-006=1000-W02-1"- , "-313692=1000-01-07=1000-007=1000-W02-2"- , "-313691=1000-01-08=1000-008=1000-W02-3"- , "-313690=1000-01-09=1000-009=1000-W02-4"- , "-30=1858-10-18=1858-291=1858-W42-1"- , "-29=1858-10-19=1858-292=1858-W42-2"- , "-28=1858-10-20=1858-293=1858-W42-3"- , "-27=1858-10-21=1858-294=1858-W42-4"- , "-26=1858-10-22=1858-295=1858-W42-5"- , "-25=1858-10-23=1858-296=1858-W42-6"- , "-24=1858-10-24=1858-297=1858-W42-7"- , "-23=1858-10-25=1858-298=1858-W43-1"- , "-22=1858-10-26=1858-299=1858-W43-2"- , "-21=1858-10-27=1858-300=1858-W43-3"- , "-20=1858-10-28=1858-301=1858-W43-4"- , "-19=1858-10-29=1858-302=1858-W43-5"- , "-18=1858-10-30=1858-303=1858-W43-6"- , "-17=1858-10-31=1858-304=1858-W43-7"- , "-16=1858-11-01=1858-305=1858-W44-1"- , "-15=1858-11-02=1858-306=1858-W44-2"- , "-14=1858-11-03=1858-307=1858-W44-3"- , "-13=1858-11-04=1858-308=1858-W44-4"- , "-12=1858-11-05=1858-309=1858-W44-5"- , "-11=1858-11-06=1858-310=1858-W44-6"- , "-10=1858-11-07=1858-311=1858-W44-7"- , "-9=1858-11-08=1858-312=1858-W45-1"- , "-8=1858-11-09=1858-313=1858-W45-2"- , "-7=1858-11-10=1858-314=1858-W45-3"- , "-6=1858-11-11=1858-315=1858-W45-4"- , "-5=1858-11-12=1858-316=1858-W45-5"- , "-4=1858-11-13=1858-317=1858-W45-6"- , "-3=1858-11-14=1858-318=1858-W45-7"- , "-2=1858-11-15=1858-319=1858-W46-1"- , "-1=1858-11-16=1858-320=1858-W46-2"- , "0=1858-11-17=1858-321=1858-W46-3"- , "1=1858-11-18=1858-322=1858-W46-4"- , "2=1858-11-19=1858-323=1858-W46-5"- , "3=1858-11-20=1858-324=1858-W46-6"- , "4=1858-11-21=1858-325=1858-W46-7"- , "5=1858-11-22=1858-326=1858-W47-1"- , "6=1858-11-23=1858-327=1858-W47-2"- , "7=1858-11-24=1858-328=1858-W47-3"- , "8=1858-11-25=1858-329=1858-W47-4"- , "9=1858-11-26=1858-330=1858-W47-5"- , "10=1858-11-27=1858-331=1858-W47-6"- , "11=1858-11-28=1858-332=1858-W47-7"- , "12=1858-11-29=1858-333=1858-W48-1"- , "13=1858-11-30=1858-334=1858-W48-2"- , "14=1858-12-01=1858-335=1858-W48-3"- , "15=1858-12-02=1858-336=1858-W48-4"- , "16=1858-12-03=1858-337=1858-W48-5"- , "17=1858-12-04=1858-338=1858-W48-6"- , "18=1858-12-05=1858-339=1858-W48-7"- , "19=1858-12-06=1858-340=1858-W49-1"- , "20=1858-12-07=1858-341=1858-W49-2"- , "21=1858-12-08=1858-342=1858-W49-3"- , "22=1858-12-09=1858-343=1858-W49-4"- , "23=1858-12-10=1858-344=1858-W49-5"- , "24=1858-12-11=1858-345=1858-W49-6"- , "25=1858-12-12=1858-346=1858-W49-7"- , "26=1858-12-13=1858-347=1858-W50-1"- , "27=1858-12-14=1858-348=1858-W50-2"- , "28=1858-12-15=1858-349=1858-W50-3"- , "29=1858-12-16=1858-350=1858-W50-4"- , "30=1858-12-17=1858-351=1858-W50-5"- , "40000=1968-05-24=1968-145=1968-W21-5"- , "50000=1995-10-10=1995-283=1995-W41-2"- , "15078=1900-02-28=1900-059=1900-W09-3"- , "15079=1900-03-01=1900-060=1900-W09-4"- , "44297=1980-02-28=1980-059=1980-W09-4"- , "44298=1980-02-29=1980-060=1980-W09-5"- , "44299=1980-03-01=1980-061=1980-W09-6"- , "47950=1990-02-28=1990-059=1990-W09-3"- , "47951=1990-03-01=1990-060=1990-W09-4"- , "51602=2000-02-28=2000-059=2000-W09-1"- , "51603=2000-02-29=2000-060=2000-W09-2"- , "51604=2000-03-01=2000-061=2000-W09-3"- , "51540=1999-12-28=1999-362=1999-W52-2"- , "51541=1999-12-29=1999-363=1999-W52-3"- , "51542=1999-12-30=1999-364=1999-W52-4"- , "51543=1999-12-31=1999-365=1999-W52-5"- , "51544=2000-01-01=2000-001=1999-W52-6"- , "51545=2000-01-02=2000-002=1999-W52-7"- , "51546=2000-01-03=2000-003=2000-W01-1"- , "51547=2000-01-04=2000-004=2000-W01-2"- , "51548=2000-01-05=2000-005=2000-W01-3"- , "51549=2000-01-06=2000-006=2000-W01-4"- , "51550=2000-01-07=2000-007=2000-W01-5"- , "51551=2000-01-08=2000-008=2000-W01-6"- , "51552=2000-01-09=2000-009=2000-W01-7"- , "51553=2000-01-10=2000-010=2000-W02-1"- , "51554=2000-01-11=2000-011=2000-W02-2"- , "51555=2000-01-12=2000-012=2000-W02-3"- , "51556=2000-01-13=2000-013=2000-W02-4"- , "51557=2000-01-14=2000-014=2000-W02-5"- , "51558=2000-01-15=2000-015=2000-W02-6"- , "51559=2000-01-16=2000-016=2000-W02-7"- , "51560=2000-01-17=2000-017=2000-W03-1"- , "51561=2000-01-18=2000-018=2000-W03-2"- , "51562=2000-01-19=2000-019=2000-W03-3"- , "51563=2000-01-20=2000-020=2000-W03-4"- , "51564=2000-01-21=2000-021=2000-W03-5"- , "51565=2000-01-22=2000-022=2000-W03-6"- , "51566=2000-01-23=2000-023=2000-W03-7"- , "51567=2000-01-24=2000-024=2000-W04-1"- , "51568=2000-01-25=2000-025=2000-W04-2"- , "51569=2000-01-26=2000-026=2000-W04-3"- , "51570=2000-01-27=2000-027=2000-W04-4"- , "51571=2000-01-28=2000-028=2000-W04-5"- , "51572=2000-01-29=2000-029=2000-W04-6"- , "51573=2000-01-30=2000-030=2000-W04-7"- , "51574=2000-01-31=2000-031=2000-W05-1"- , "51575=2000-02-01=2000-032=2000-W05-2"- , "51576=2000-02-02=2000-033=2000-W05-3"- , "51577=2000-02-03=2000-034=2000-W05-4"- , "51578=2000-02-04=2000-035=2000-W05-5"- , "51579=2000-02-05=2000-036=2000-W05-6"- , "51580=2000-02-06=2000-037=2000-W05-7"- , "51581=2000-02-07=2000-038=2000-W06-1"- , "51582=2000-02-08=2000-039=2000-W06-2"- , "51583=2000-02-09=2000-040=2000-W06-3"- , "51584=2000-02-10=2000-041=2000-W06-4"- , "51585=2000-02-11=2000-042=2000-W06-5"- , "51586=2000-02-12=2000-043=2000-W06-6"- , "51587=2000-02-13=2000-044=2000-W06-7"- , "51588=2000-02-14=2000-045=2000-W07-1"- , "51589=2000-02-15=2000-046=2000-W07-2"- , "51590=2000-02-16=2000-047=2000-W07-3"- , "51591=2000-02-17=2000-048=2000-W07-4"- , "51592=2000-02-18=2000-049=2000-W07-5"- , "51593=2000-02-19=2000-050=2000-W07-6"- , "51594=2000-02-20=2000-051=2000-W07-7"- , "51595=2000-02-21=2000-052=2000-W08-1"- , "51596=2000-02-22=2000-053=2000-W08-2"- , "51597=2000-02-23=2000-054=2000-W08-3"- , "51598=2000-02-24=2000-055=2000-W08-4"- , "51599=2000-02-25=2000-056=2000-W08-5"- , "51600=2000-02-26=2000-057=2000-W08-6"- , "51601=2000-02-27=2000-058=2000-W08-7"- , "51602=2000-02-28=2000-059=2000-W09-1"- , "51603=2000-02-29=2000-060=2000-W09-2"- , "51604=2000-03-01=2000-061=2000-W09-3"- , "51605=2000-03-02=2000-062=2000-W09-4"- , "51606=2000-03-03=2000-063=2000-W09-5"- , "51607=2000-03-04=2000-064=2000-W09-6"- , "51608=2000-03-05=2000-065=2000-W09-7"- , "51609=2000-03-06=2000-066=2000-W10-1"- , "51610=2000-03-07=2000-067=2000-W10-2"- , "51611=2000-03-08=2000-068=2000-W10-3"- , "51612=2000-03-09=2000-069=2000-W10-4"- , "51613=2000-03-10=2000-070=2000-W10-5"- , "51614=2000-03-11=2000-071=2000-W10-6"- , "51615=2000-03-12=2000-072=2000-W10-7"- , "51616=2000-03-13=2000-073=2000-W11-1"- , "51617=2000-03-14=2000-074=2000-W11-2"- , "51618=2000-03-15=2000-075=2000-W11-3"- , "51619=2000-03-16=2000-076=2000-W11-4"- , "51620=2000-03-17=2000-077=2000-W11-5"- , "51621=2000-03-18=2000-078=2000-W11-6"- , "51622=2000-03-19=2000-079=2000-W11-7"- , "51623=2000-03-20=2000-080=2000-W12-1"- , "51624=2000-03-21=2000-081=2000-W12-2"- , "51625=2000-03-22=2000-082=2000-W12-3"- , "51626=2000-03-23=2000-083=2000-W12-4"- , "51627=2000-03-24=2000-084=2000-W12-5"- , "51628=2000-03-25=2000-085=2000-W12-6"- , "51629=2000-03-26=2000-086=2000-W12-7"- , "51630=2000-03-27=2000-087=2000-W13-1"- , "51631=2000-03-28=2000-088=2000-W13-2"- , "51632=2000-03-29=2000-089=2000-W13-3"- , "51633=2000-03-30=2000-090=2000-W13-4"- , "51634=2000-03-31=2000-091=2000-W13-5"- , "51635=2000-04-01=2000-092=2000-W13-6"- , "51636=2000-04-02=2000-093=2000-W13-7"- , "51637=2000-04-03=2000-094=2000-W14-1"- , "51638=2000-04-04=2000-095=2000-W14-2"- , "51639=2000-04-05=2000-096=2000-W14-3"- , "51640=2000-04-06=2000-097=2000-W14-4"- , "51641=2000-04-07=2000-098=2000-W14-5"- , "51642=2000-04-08=2000-099=2000-W14-6"- , "51643=2000-04-09=2000-100=2000-W14-7"- , "51644=2000-04-10=2000-101=2000-W15-1"- , "51645=2000-04-11=2000-102=2000-W15-2"- , "51646=2000-04-12=2000-103=2000-W15-3"- , "51647=2000-04-13=2000-104=2000-W15-4"- , "51648=2000-04-14=2000-105=2000-W15-5"- , "51649=2000-04-15=2000-106=2000-W15-6"- , "51650=2000-04-16=2000-107=2000-W15-7"- , "51651=2000-04-17=2000-108=2000-W16-1"- , "51652=2000-04-18=2000-109=2000-W16-2"- , "51653=2000-04-19=2000-110=2000-W16-3"- , "51654=2000-04-20=2000-111=2000-W16-4"- , "51655=2000-04-21=2000-112=2000-W16-5"- , "51656=2000-04-22=2000-113=2000-W16-6"- , "51657=2000-04-23=2000-114=2000-W16-7"- , "51658=2000-04-24=2000-115=2000-W17-1"- , "51659=2000-04-25=2000-116=2000-W17-2"- , "51660=2000-04-26=2000-117=2000-W17-3"- , "51661=2000-04-27=2000-118=2000-W17-4"- , "51662=2000-04-28=2000-119=2000-W17-5"- , "51663=2000-04-29=2000-120=2000-W17-6"- , "51664=2000-04-30=2000-121=2000-W17-7"- , "51665=2000-05-01=2000-122=2000-W18-1"- , "51666=2000-05-02=2000-123=2000-W18-2"- , "51667=2000-05-03=2000-124=2000-W18-3"- , "51668=2000-05-04=2000-125=2000-W18-4"- , "51669=2000-05-05=2000-126=2000-W18-5"- , "51670=2000-05-06=2000-127=2000-W18-6"- , "51671=2000-05-07=2000-128=2000-W18-7"- , "51672=2000-05-08=2000-129=2000-W19-1"- , "51673=2000-05-09=2000-130=2000-W19-2"- , "51674=2000-05-10=2000-131=2000-W19-3"- , "51675=2000-05-11=2000-132=2000-W19-4"- , "51676=2000-05-12=2000-133=2000-W19-5"- , "51677=2000-05-13=2000-134=2000-W19-6"- , "51678=2000-05-14=2000-135=2000-W19-7"- , "51679=2000-05-15=2000-136=2000-W20-1"- , "51680=2000-05-16=2000-137=2000-W20-2"- , "51681=2000-05-17=2000-138=2000-W20-3"- , "51682=2000-05-18=2000-139=2000-W20-4"- , "51683=2000-05-19=2000-140=2000-W20-5"- , "51684=2000-05-20=2000-141=2000-W20-6"- , "51685=2000-05-21=2000-142=2000-W20-7"- , "51686=2000-05-22=2000-143=2000-W21-1"- , "51687=2000-05-23=2000-144=2000-W21-2"- , "51688=2000-05-24=2000-145=2000-W21-3"- , "51689=2000-05-25=2000-146=2000-W21-4"- , "51690=2000-05-26=2000-147=2000-W21-5"- , "51691=2000-05-27=2000-148=2000-W21-6"- , "51692=2000-05-28=2000-149=2000-W21-7"- , "51693=2000-05-29=2000-150=2000-W22-1"- , "51694=2000-05-30=2000-151=2000-W22-2"- , "51695=2000-05-31=2000-152=2000-W22-3"- , "51696=2000-06-01=2000-153=2000-W22-4"- , "51697=2000-06-02=2000-154=2000-W22-5"- , "51698=2000-06-03=2000-155=2000-W22-6"- , "51699=2000-06-04=2000-156=2000-W22-7"- , "51700=2000-06-05=2000-157=2000-W23-1"- , "51701=2000-06-06=2000-158=2000-W23-2"- , "51702=2000-06-07=2000-159=2000-W23-3"- , "51703=2000-06-08=2000-160=2000-W23-4"- , "51704=2000-06-09=2000-161=2000-W23-5"- , "51705=2000-06-10=2000-162=2000-W23-6"- , "51706=2000-06-11=2000-163=2000-W23-7"- , "51707=2000-06-12=2000-164=2000-W24-1"- , "51708=2000-06-13=2000-165=2000-W24-2"- , "51709=2000-06-14=2000-166=2000-W24-3"- , "51710=2000-06-15=2000-167=2000-W24-4"- , "51711=2000-06-16=2000-168=2000-W24-5"- , "51712=2000-06-17=2000-169=2000-W24-6"- , "51713=2000-06-18=2000-170=2000-W24-7"- , "51714=2000-06-19=2000-171=2000-W25-1"- , "51715=2000-06-20=2000-172=2000-W25-2"- , "51716=2000-06-21=2000-173=2000-W25-3"- , "51717=2000-06-22=2000-174=2000-W25-4"- , "51718=2000-06-23=2000-175=2000-W25-5"- , "51719=2000-06-24=2000-176=2000-W25-6"- , "51720=2000-06-25=2000-177=2000-W25-7"- , "51721=2000-06-26=2000-178=2000-W26-1"- , "51722=2000-06-27=2000-179=2000-W26-2"- , "51723=2000-06-28=2000-180=2000-W26-3"- , "51724=2000-06-29=2000-181=2000-W26-4"- , "51725=2000-06-30=2000-182=2000-W26-5"- , "51726=2000-07-01=2000-183=2000-W26-6"- , "51727=2000-07-02=2000-184=2000-W26-7"- , "51728=2000-07-03=2000-185=2000-W27-1"- , "51729=2000-07-04=2000-186=2000-W27-2"- , "51730=2000-07-05=2000-187=2000-W27-3"- , "51731=2000-07-06=2000-188=2000-W27-4"- , "51732=2000-07-07=2000-189=2000-W27-5"- , "51733=2000-07-08=2000-190=2000-W27-6"- , "51734=2000-07-09=2000-191=2000-W27-7"- , "51735=2000-07-10=2000-192=2000-W28-1"- , "51736=2000-07-11=2000-193=2000-W28-2"- , "51737=2000-07-12=2000-194=2000-W28-3"- , "51738=2000-07-13=2000-195=2000-W28-4"- , "51739=2000-07-14=2000-196=2000-W28-5"- , "51740=2000-07-15=2000-197=2000-W28-6"- , "51741=2000-07-16=2000-198=2000-W28-7"- , "51742=2000-07-17=2000-199=2000-W29-1"- , "51743=2000-07-18=2000-200=2000-W29-2"- , "51744=2000-07-19=2000-201=2000-W29-3"- , "51745=2000-07-20=2000-202=2000-W29-4"- , "51746=2000-07-21=2000-203=2000-W29-5"- , "51747=2000-07-22=2000-204=2000-W29-6"- , "51748=2000-07-23=2000-205=2000-W29-7"- , "51749=2000-07-24=2000-206=2000-W30-1"- , "51750=2000-07-25=2000-207=2000-W30-2"- , "51751=2000-07-26=2000-208=2000-W30-3"- , "51752=2000-07-27=2000-209=2000-W30-4"- , "51753=2000-07-28=2000-210=2000-W30-5"- , "51754=2000-07-29=2000-211=2000-W30-6"- , "51755=2000-07-30=2000-212=2000-W30-7"- , "51756=2000-07-31=2000-213=2000-W31-1"- , "51757=2000-08-01=2000-214=2000-W31-2"- , "51758=2000-08-02=2000-215=2000-W31-3"- , "51759=2000-08-03=2000-216=2000-W31-4"- , "51760=2000-08-04=2000-217=2000-W31-5"- , "51761=2000-08-05=2000-218=2000-W31-6"- , "51762=2000-08-06=2000-219=2000-W31-7"- , "51763=2000-08-07=2000-220=2000-W32-1"- , "51764=2000-08-08=2000-221=2000-W32-2"- , "51765=2000-08-09=2000-222=2000-W32-3"- , "51766=2000-08-10=2000-223=2000-W32-4"- , "51767=2000-08-11=2000-224=2000-W32-5"- , "51768=2000-08-12=2000-225=2000-W32-6"- , "51769=2000-08-13=2000-226=2000-W32-7"- , "51770=2000-08-14=2000-227=2000-W33-1"- , "51771=2000-08-15=2000-228=2000-W33-2"- , "51772=2000-08-16=2000-229=2000-W33-3"- , "51773=2000-08-17=2000-230=2000-W33-4"- , "51774=2000-08-18=2000-231=2000-W33-5"- , "51775=2000-08-19=2000-232=2000-W33-6"- , "51776=2000-08-20=2000-233=2000-W33-7"- , "51777=2000-08-21=2000-234=2000-W34-1"- , "51778=2000-08-22=2000-235=2000-W34-2"- , "51779=2000-08-23=2000-236=2000-W34-3"- , "51780=2000-08-24=2000-237=2000-W34-4"- , "51781=2000-08-25=2000-238=2000-W34-5"- , "51782=2000-08-26=2000-239=2000-W34-6"- , "51783=2000-08-27=2000-240=2000-W34-7"- , "51784=2000-08-28=2000-241=2000-W35-1"- , "51785=2000-08-29=2000-242=2000-W35-2"- , "51786=2000-08-30=2000-243=2000-W35-3"- , "51787=2000-08-31=2000-244=2000-W35-4"- , "51788=2000-09-01=2000-245=2000-W35-5"- , "51789=2000-09-02=2000-246=2000-W35-6"- , "51790=2000-09-03=2000-247=2000-W35-7"- , "51791=2000-09-04=2000-248=2000-W36-1"- , "51792=2000-09-05=2000-249=2000-W36-2"- , "51793=2000-09-06=2000-250=2000-W36-3"- , "51794=2000-09-07=2000-251=2000-W36-4"- , "51795=2000-09-08=2000-252=2000-W36-5"- , "51796=2000-09-09=2000-253=2000-W36-6"- , "51797=2000-09-10=2000-254=2000-W36-7"- , "51798=2000-09-11=2000-255=2000-W37-1"- , "51799=2000-09-12=2000-256=2000-W37-2"- , "51800=2000-09-13=2000-257=2000-W37-3"- , "51801=2000-09-14=2000-258=2000-W37-4"- , "51802=2000-09-15=2000-259=2000-W37-5"- , "51803=2000-09-16=2000-260=2000-W37-6"- , "51804=2000-09-17=2000-261=2000-W37-7"- , "51805=2000-09-18=2000-262=2000-W38-1"- , "51806=2000-09-19=2000-263=2000-W38-2"- , "51807=2000-09-20=2000-264=2000-W38-3"- , "51808=2000-09-21=2000-265=2000-W38-4"- , "51809=2000-09-22=2000-266=2000-W38-5"- , "51810=2000-09-23=2000-267=2000-W38-6"- , "51811=2000-09-24=2000-268=2000-W38-7"- , "51812=2000-09-25=2000-269=2000-W39-1"- , "51813=2000-09-26=2000-270=2000-W39-2"- , "51814=2000-09-27=2000-271=2000-W39-3"- , "51815=2000-09-28=2000-272=2000-W39-4"- , "51816=2000-09-29=2000-273=2000-W39-5"- , "51817=2000-09-30=2000-274=2000-W39-6"- , "51818=2000-10-01=2000-275=2000-W39-7"- , "51819=2000-10-02=2000-276=2000-W40-1"- , "51820=2000-10-03=2000-277=2000-W40-2"- , "51821=2000-10-04=2000-278=2000-W40-3"- , "51822=2000-10-05=2000-279=2000-W40-4"- , "51823=2000-10-06=2000-280=2000-W40-5"- , "51824=2000-10-07=2000-281=2000-W40-6"- , "51825=2000-10-08=2000-282=2000-W40-7"- , "51826=2000-10-09=2000-283=2000-W41-1"- , "51827=2000-10-10=2000-284=2000-W41-2"- , "51828=2000-10-11=2000-285=2000-W41-3"- , "51829=2000-10-12=2000-286=2000-W41-4"- , "51830=2000-10-13=2000-287=2000-W41-5"- , "51831=2000-10-14=2000-288=2000-W41-6"- , "51832=2000-10-15=2000-289=2000-W41-7"- , "51833=2000-10-16=2000-290=2000-W42-1"- , "51834=2000-10-17=2000-291=2000-W42-2"- , "51835=2000-10-18=2000-292=2000-W42-3"- , "51836=2000-10-19=2000-293=2000-W42-4"- , "51837=2000-10-20=2000-294=2000-W42-5"- , "51838=2000-10-21=2000-295=2000-W42-6"- , "51839=2000-10-22=2000-296=2000-W42-7"- , "51840=2000-10-23=2000-297=2000-W43-1"- , "51841=2000-10-24=2000-298=2000-W43-2"- , "51842=2000-10-25=2000-299=2000-W43-3"- , "51843=2000-10-26=2000-300=2000-W43-4"- , "51844=2000-10-27=2000-301=2000-W43-5"- , "51845=2000-10-28=2000-302=2000-W43-6"- , "51846=2000-10-29=2000-303=2000-W43-7"- , "51847=2000-10-30=2000-304=2000-W44-1"- , "51848=2000-10-31=2000-305=2000-W44-2"- , "51849=2000-11-01=2000-306=2000-W44-3"- , "51850=2000-11-02=2000-307=2000-W44-4"- , "51851=2000-11-03=2000-308=2000-W44-5"- , "51852=2000-11-04=2000-309=2000-W44-6"- , "51853=2000-11-05=2000-310=2000-W44-7"- , "51854=2000-11-06=2000-311=2000-W45-1"- , "51855=2000-11-07=2000-312=2000-W45-2"- , "51856=2000-11-08=2000-313=2000-W45-3"- , "51857=2000-11-09=2000-314=2000-W45-4"- , "51858=2000-11-10=2000-315=2000-W45-5"- , "51859=2000-11-11=2000-316=2000-W45-6"- , "51860=2000-11-12=2000-317=2000-W45-7"- , "51861=2000-11-13=2000-318=2000-W46-1"- , "51862=2000-11-14=2000-319=2000-W46-2"- , "51863=2000-11-15=2000-320=2000-W46-3"- , "51864=2000-11-16=2000-321=2000-W46-4"- , "51865=2000-11-17=2000-322=2000-W46-5"- , "51866=2000-11-18=2000-323=2000-W46-6"- , "51867=2000-11-19=2000-324=2000-W46-7"- , "51868=2000-11-20=2000-325=2000-W47-1"- , "51869=2000-11-21=2000-326=2000-W47-2"- , "51870=2000-11-22=2000-327=2000-W47-3"- , "51871=2000-11-23=2000-328=2000-W47-4"- , "51872=2000-11-24=2000-329=2000-W47-5"- , "51873=2000-11-25=2000-330=2000-W47-6"- , "51874=2000-11-26=2000-331=2000-W47-7"- , "51875=2000-11-27=2000-332=2000-W48-1"- , "51876=2000-11-28=2000-333=2000-W48-2"- , "51877=2000-11-29=2000-334=2000-W48-3"- , "51878=2000-11-30=2000-335=2000-W48-4"- , "51879=2000-12-01=2000-336=2000-W48-5"- , "51880=2000-12-02=2000-337=2000-W48-6"- , "51881=2000-12-03=2000-338=2000-W48-7"- , "51882=2000-12-04=2000-339=2000-W49-1"- , "51883=2000-12-05=2000-340=2000-W49-2"- , "51884=2000-12-06=2000-341=2000-W49-3"- , "51885=2000-12-07=2000-342=2000-W49-4"- , "51886=2000-12-08=2000-343=2000-W49-5"- , "51887=2000-12-09=2000-344=2000-W49-6"- , "51888=2000-12-10=2000-345=2000-W49-7"- , "51889=2000-12-11=2000-346=2000-W50-1"- , "51890=2000-12-12=2000-347=2000-W50-2"- , "51891=2000-12-13=2000-348=2000-W50-3"- , "51892=2000-12-14=2000-349=2000-W50-4"- , "51893=2000-12-15=2000-350=2000-W50-5"- , "51894=2000-12-16=2000-351=2000-W50-6"- , "51895=2000-12-17=2000-352=2000-W50-7"- , "51896=2000-12-18=2000-353=2000-W51-1"- , "51897=2000-12-19=2000-354=2000-W51-2"- , "51898=2000-12-20=2000-355=2000-W51-3"- , "51899=2000-12-21=2000-356=2000-W51-4"- , "51900=2000-12-22=2000-357=2000-W51-5"- , "51901=2000-12-23=2000-358=2000-W51-6"- , "51902=2000-12-24=2000-359=2000-W51-7"- , "51903=2000-12-25=2000-360=2000-W52-1"- , "51904=2000-12-26=2000-361=2000-W52-2"- , "51905=2000-12-27=2000-362=2000-W52-3"- , "51906=2000-12-28=2000-363=2000-W52-4"- , "51907=2000-12-29=2000-364=2000-W52-5"- , "51908=2000-12-30=2000-365=2000-W52-6"- , "51909=2000-12-31=2000-366=2000-W52-7"- , "51910=2001-01-01=2001-001=2001-W01-1"- , "51911=2001-01-02=2001-002=2001-W01-2"- , "51912=2001-01-03=2001-003=2001-W01-3"- , "51913=2001-01-04=2001-004=2001-W01-4"- , "51914=2001-01-05=2001-005=2001-W01-5"- , "51915=2001-01-06=2001-006=2001-W01-6"- , "51916=2001-01-07=2001-007=2001-W01-7"- , "51917=2001-01-08=2001-008=2001-W02-1"- , "51918=2001-01-09=2001-009=2001-W02-2"- , "51919=2001-01-10=2001-010=2001-W02-3"- , "51920=2001-01-11=2001-011=2001-W02-4"- , "51921=2001-01-12=2001-012=2001-W02-5"- , "51922=2001-01-13=2001-013=2001-W02-6"- , "51923=2001-01-14=2001-014=2001-W02-7"- , "51924=2001-01-15=2001-015=2001-W03-1"- , "51925=2001-01-16=2001-016=2001-W03-2"- , "51926=2001-01-17=2001-017=2001-W03-3"- , "51927=2001-01-18=2001-018=2001-W03-4"- , "51928=2001-01-19=2001-019=2001-W03-5"- , "51929=2001-01-20=2001-020=2001-W03-6"- , "51930=2001-01-21=2001-021=2001-W03-7"- , "51931=2001-01-22=2001-022=2001-W04-1"- , "51932=2001-01-23=2001-023=2001-W04-2"- , "51933=2001-01-24=2001-024=2001-W04-3"- , "51934=2001-01-25=2001-025=2001-W04-4"- , "51935=2001-01-26=2001-026=2001-W04-5"- , "51936=2001-01-27=2001-027=2001-W04-6"- , "51937=2001-01-28=2001-028=2001-W04-7"- , "51938=2001-01-29=2001-029=2001-W05-1"- , "51939=2001-01-30=2001-030=2001-W05-2"- , "51940=2001-01-31=2001-031=2001-W05-3"- , "51941=2001-02-01=2001-032=2001-W05-4"- , "51942=2001-02-02=2001-033=2001-W05-5"- , "51943=2001-02-03=2001-034=2001-W05-6"- , "51944=2001-02-04=2001-035=2001-W05-7"- , "51945=2001-02-05=2001-036=2001-W06-1"- , "51946=2001-02-06=2001-037=2001-W06-2"- , "51947=2001-02-07=2001-038=2001-W06-3"- , "51948=2001-02-08=2001-039=2001-W06-4"- , "51949=2001-02-09=2001-040=2001-W06-5"- , "51950=2001-02-10=2001-041=2001-W06-6"- , "51951=2001-02-11=2001-042=2001-W06-7"- , "51952=2001-02-12=2001-043=2001-W07-1"- , "51953=2001-02-13=2001-044=2001-W07-2"- , "51954=2001-02-14=2001-045=2001-W07-3"- , "51955=2001-02-15=2001-046=2001-W07-4"- , "51956=2001-02-16=2001-047=2001-W07-5"- , "51957=2001-02-17=2001-048=2001-W07-6"- , "51958=2001-02-18=2001-049=2001-W07-7"- , "51959=2001-02-19=2001-050=2001-W08-1"- , "51960=2001-02-20=2001-051=2001-W08-2"- , "51961=2001-02-21=2001-052=2001-W08-3"- , "51962=2001-02-22=2001-053=2001-W08-4"- , "51963=2001-02-23=2001-054=2001-W08-5"- , "51964=2001-02-24=2001-055=2001-W08-6"- , "51965=2001-02-25=2001-056=2001-W08-7"- , "51966=2001-02-26=2001-057=2001-W09-1"- , "51967=2001-02-27=2001-058=2001-W09-2"- , "51968=2001-02-28=2001-059=2001-W09-3"- , "51969=2001-03-01=2001-060=2001-W09-4"- , "51970=2001-03-02=2001-061=2001-W09-5"- , "51971=2001-03-03=2001-062=2001-W09-6"- , "51972=2001-03-04=2001-063=2001-W09-7"- , "51973=2001-03-05=2001-064=2001-W10-1"- , "51974=2001-03-06=2001-065=2001-W10-2"- , "51975=2001-03-07=2001-066=2001-W10-3"- , "51976=2001-03-08=2001-067=2001-W10-4"- , "51977=2001-03-09=2001-068=2001-W10-5"- , "51978=2001-03-10=2001-069=2001-W10-6"- , "51979=2001-03-11=2001-070=2001-W10-7"- , "51980=2001-03-12=2001-071=2001-W11-1"- , "51981=2001-03-13=2001-072=2001-W11-2"- , "51982=2001-03-14=2001-073=2001-W11-3"- , "51983=2001-03-15=2001-074=2001-W11-4"- , "51984=2001-03-16=2001-075=2001-W11-5"- , "51985=2001-03-17=2001-076=2001-W11-6"- , "51986=2001-03-18=2001-077=2001-W11-7"- , "51987=2001-03-19=2001-078=2001-W12-1"- , "51988=2001-03-20=2001-079=2001-W12-2"- , "51989=2001-03-21=2001-080=2001-W12-3"- , "51990=2001-03-22=2001-081=2001-W12-4"- , "51991=2001-03-23=2001-082=2001-W12-5"- , "51992=2001-03-24=2001-083=2001-W12-6"- , "51993=2001-03-25=2001-084=2001-W12-7"- , "51994=2001-03-26=2001-085=2001-W13-1"- , "51995=2001-03-27=2001-086=2001-W13-2"- , "51996=2001-03-28=2001-087=2001-W13-3"- , "51997=2001-03-29=2001-088=2001-W13-4"- , "51998=2001-03-30=2001-089=2001-W13-5"- , "51999=2001-03-31=2001-090=2001-W13-6"- , "52000=2001-04-01=2001-091=2001-W13-7"- , "52001=2001-04-02=2001-092=2001-W14-1"- , "52002=2001-04-03=2001-093=2001-W14-2"- , "52003=2001-04-04=2001-094=2001-W14-3"- , "52004=2001-04-05=2001-095=2001-W14-4"- , "52005=2001-04-06=2001-096=2001-W14-5"- , "52006=2001-04-07=2001-097=2001-W14-6"- , "52007=2001-04-08=2001-098=2001-W14-7"- , "52008=2001-04-09=2001-099=2001-W15-1"- , "52009=2001-04-10=2001-100=2001-W15-2"- , "52010=2001-04-11=2001-101=2001-W15-3"- , "52011=2001-04-12=2001-102=2001-W15-4"- , "52012=2001-04-13=2001-103=2001-W15-5"- , "52013=2001-04-14=2001-104=2001-W15-6"- , "52014=2001-04-15=2001-105=2001-W15-7"- , "52015=2001-04-16=2001-106=2001-W16-1"- , "52016=2001-04-17=2001-107=2001-W16-2"- , "52017=2001-04-18=2001-108=2001-W16-3"- , "52018=2001-04-19=2001-109=2001-W16-4"- , "52019=2001-04-20=2001-110=2001-W16-5"- , "52020=2001-04-21=2001-111=2001-W16-6"- , "52021=2001-04-22=2001-112=2001-W16-7"- , "52022=2001-04-23=2001-113=2001-W17-1"- , "52023=2001-04-24=2001-114=2001-W17-2"- , "52024=2001-04-25=2001-115=2001-W17-3"- , "52025=2001-04-26=2001-116=2001-W17-4"- , "52026=2001-04-27=2001-117=2001-W17-5"- , "52027=2001-04-28=2001-118=2001-W17-6"- , "52028=2001-04-29=2001-119=2001-W17-7"- , "52029=2001-04-30=2001-120=2001-W18-1"- , "52030=2001-05-01=2001-121=2001-W18-2"- , "52031=2001-05-02=2001-122=2001-W18-3"- , "52032=2001-05-03=2001-123=2001-W18-4"- , "52033=2001-05-04=2001-124=2001-W18-5"- , "52034=2001-05-05=2001-125=2001-W18-6"- , "52035=2001-05-06=2001-126=2001-W18-7"- , "52036=2001-05-07=2001-127=2001-W19-1"- , "52037=2001-05-08=2001-128=2001-W19-2"- , "52038=2001-05-09=2001-129=2001-W19-3"- , "52039=2001-05-10=2001-130=2001-W19-4"- , "52040=2001-05-11=2001-131=2001-W19-5"- , "52041=2001-05-12=2001-132=2001-W19-6"- , "52042=2001-05-13=2001-133=2001-W19-7"- , "52043=2001-05-14=2001-134=2001-W20-1"- , "52044=2001-05-15=2001-135=2001-W20-2"- , "52045=2001-05-16=2001-136=2001-W20-3"- , "52046=2001-05-17=2001-137=2001-W20-4"- , "52047=2001-05-18=2001-138=2001-W20-5"- , "52048=2001-05-19=2001-139=2001-W20-6"- , "52049=2001-05-20=2001-140=2001-W20-7"- , "52050=2001-05-21=2001-141=2001-W21-1"- , "52051=2001-05-22=2001-142=2001-W21-2"- , "52052=2001-05-23=2001-143=2001-W21-3"- , "52053=2001-05-24=2001-144=2001-W21-4"- , "52054=2001-05-25=2001-145=2001-W21-5"- , "52055=2001-05-26=2001-146=2001-W21-6"- , "52056=2001-05-27=2001-147=2001-W21-7"- , "52057=2001-05-28=2001-148=2001-W22-1"- , "52058=2001-05-29=2001-149=2001-W22-2"- , "52059=2001-05-30=2001-150=2001-W22-3"- , "52060=2001-05-31=2001-151=2001-W22-4"- , "52061=2001-06-01=2001-152=2001-W22-5"- , "52062=2001-06-02=2001-153=2001-W22-6"- , "52063=2001-06-03=2001-154=2001-W22-7"- , "52064=2001-06-04=2001-155=2001-W23-1"- , "52065=2001-06-05=2001-156=2001-W23-2"- , "52066=2001-06-06=2001-157=2001-W23-3"- , "52067=2001-06-07=2001-158=2001-W23-4"- , "52068=2001-06-08=2001-159=2001-W23-5"- , "52069=2001-06-09=2001-160=2001-W23-6"- , "52070=2001-06-10=2001-161=2001-W23-7"- , "52071=2001-06-11=2001-162=2001-W24-1"- , "52072=2001-06-12=2001-163=2001-W24-2"- , "52073=2001-06-13=2001-164=2001-W24-3"- , "52074=2001-06-14=2001-165=2001-W24-4"- , "52075=2001-06-15=2001-166=2001-W24-5"- , "52076=2001-06-16=2001-167=2001-W24-6"- , "52077=2001-06-17=2001-168=2001-W24-7"- , "52078=2001-06-18=2001-169=2001-W25-1"- , "52079=2001-06-19=2001-170=2001-W25-2"- , "52080=2001-06-20=2001-171=2001-W25-3"- , "52081=2001-06-21=2001-172=2001-W25-4"- , "52082=2001-06-22=2001-173=2001-W25-5"- , "52083=2001-06-23=2001-174=2001-W25-6"- , "52084=2001-06-24=2001-175=2001-W25-7"- , "52085=2001-06-25=2001-176=2001-W26-1"- , "52086=2001-06-26=2001-177=2001-W26-2"- , "52087=2001-06-27=2001-178=2001-W26-3"- , "52088=2001-06-28=2001-179=2001-W26-4"- , "52089=2001-06-29=2001-180=2001-W26-5"- , "52090=2001-06-30=2001-181=2001-W26-6"- , "52091=2001-07-01=2001-182=2001-W26-7"- , "52092=2001-07-02=2001-183=2001-W27-1"- , "52093=2001-07-03=2001-184=2001-W27-2"- , "52094=2001-07-04=2001-185=2001-W27-3"- , "52095=2001-07-05=2001-186=2001-W27-4"- , "52096=2001-07-06=2001-187=2001-W27-5"- , "52097=2001-07-07=2001-188=2001-W27-6"- , "52098=2001-07-08=2001-189=2001-W27-7"- , "52099=2001-07-09=2001-190=2001-W28-1"- , "52100=2001-07-10=2001-191=2001-W28-2"- , "52101=2001-07-11=2001-192=2001-W28-3"- , "52102=2001-07-12=2001-193=2001-W28-4"- , "52103=2001-07-13=2001-194=2001-W28-5"- , "52104=2001-07-14=2001-195=2001-W28-6"- , "52105=2001-07-15=2001-196=2001-W28-7"- , "52106=2001-07-16=2001-197=2001-W29-1"- , "52107=2001-07-17=2001-198=2001-W29-2"- , "52108=2001-07-18=2001-199=2001-W29-3"- , "52109=2001-07-19=2001-200=2001-W29-4"- , "52110=2001-07-20=2001-201=2001-W29-5"- , "52111=2001-07-21=2001-202=2001-W29-6"- , "52112=2001-07-22=2001-203=2001-W29-7"- , "52113=2001-07-23=2001-204=2001-W30-1"- , "52114=2001-07-24=2001-205=2001-W30-2"- , "52115=2001-07-25=2001-206=2001-W30-3"- , "52116=2001-07-26=2001-207=2001-W30-4"- , "52117=2001-07-27=2001-208=2001-W30-5"- , "52118=2001-07-28=2001-209=2001-W30-6"- , "52119=2001-07-29=2001-210=2001-W30-7"- , "52120=2001-07-30=2001-211=2001-W31-1"- , "52121=2001-07-31=2001-212=2001-W31-2"- , "52122=2001-08-01=2001-213=2001-W31-3"- , "52123=2001-08-02=2001-214=2001-W31-4"- , "52124=2001-08-03=2001-215=2001-W31-5"- , "52125=2001-08-04=2001-216=2001-W31-6"- , "52126=2001-08-05=2001-217=2001-W31-7"- , "52127=2001-08-06=2001-218=2001-W32-1"- , "52128=2001-08-07=2001-219=2001-W32-2"- , "52129=2001-08-08=2001-220=2001-W32-3"- , "52130=2001-08-09=2001-221=2001-W32-4"- , "52131=2001-08-10=2001-222=2001-W32-5"- , "52132=2001-08-11=2001-223=2001-W32-6"- , "52133=2001-08-12=2001-224=2001-W32-7"- , "52134=2001-08-13=2001-225=2001-W33-1"- , "52135=2001-08-14=2001-226=2001-W33-2"- , "52136=2001-08-15=2001-227=2001-W33-3"- , "52137=2001-08-16=2001-228=2001-W33-4"- , "52138=2001-08-17=2001-229=2001-W33-5"- , "52139=2001-08-18=2001-230=2001-W33-6"- , "52140=2001-08-19=2001-231=2001-W33-7"- , "52141=2001-08-20=2001-232=2001-W34-1"- , "52142=2001-08-21=2001-233=2001-W34-2"- , "52143=2001-08-22=2001-234=2001-W34-3"- , "52144=2001-08-23=2001-235=2001-W34-4"- , "52145=2001-08-24=2001-236=2001-W34-5"- , "52146=2001-08-25=2001-237=2001-W34-6"- , "52147=2001-08-26=2001-238=2001-W34-7"- , "52148=2001-08-27=2001-239=2001-W35-1"- , "52149=2001-08-28=2001-240=2001-W35-2"- , "52150=2001-08-29=2001-241=2001-W35-3"- , "52151=2001-08-30=2001-242=2001-W35-4"- , "52152=2001-08-31=2001-243=2001-W35-5"- , "52153=2001-09-01=2001-244=2001-W35-6"- , "52154=2001-09-02=2001-245=2001-W35-7"- , "52155=2001-09-03=2001-246=2001-W36-1"- , "52156=2001-09-04=2001-247=2001-W36-2"- , "52157=2001-09-05=2001-248=2001-W36-3"- , "52158=2001-09-06=2001-249=2001-W36-4"- , "52159=2001-09-07=2001-250=2001-W36-5"- , "52160=2001-09-08=2001-251=2001-W36-6"- , "52161=2001-09-09=2001-252=2001-W36-7"- , "52162=2001-09-10=2001-253=2001-W37-1"- , "52163=2001-09-11=2001-254=2001-W37-2"- , "52164=2001-09-12=2001-255=2001-W37-3"- , "52165=2001-09-13=2001-256=2001-W37-4"- , "52166=2001-09-14=2001-257=2001-W37-5"- , "52167=2001-09-15=2001-258=2001-W37-6"- , "52168=2001-09-16=2001-259=2001-W37-7"- , "52169=2001-09-17=2001-260=2001-W38-1"- , "52170=2001-09-18=2001-261=2001-W38-2"- , "52171=2001-09-19=2001-262=2001-W38-3"- , "52172=2001-09-20=2001-263=2001-W38-4"- , "52173=2001-09-21=2001-264=2001-W38-5"- , "52174=2001-09-22=2001-265=2001-W38-6"- , "52175=2001-09-23=2001-266=2001-W38-7"- , "52176=2001-09-24=2001-267=2001-W39-1"- , "52177=2001-09-25=2001-268=2001-W39-2"- , "52178=2001-09-26=2001-269=2001-W39-3"- , "52179=2001-09-27=2001-270=2001-W39-4"- , "52180=2001-09-28=2001-271=2001-W39-5"- , "52181=2001-09-29=2001-272=2001-W39-6"- , "52182=2001-09-30=2001-273=2001-W39-7"- , "52183=2001-10-01=2001-274=2001-W40-1"- , "52184=2001-10-02=2001-275=2001-W40-2"- , "52185=2001-10-03=2001-276=2001-W40-3"- , "52186=2001-10-04=2001-277=2001-W40-4"- , "52187=2001-10-05=2001-278=2001-W40-5"- , "52188=2001-10-06=2001-279=2001-W40-6"- , "52189=2001-10-07=2001-280=2001-W40-7"- , "52190=2001-10-08=2001-281=2001-W41-1"- , "52191=2001-10-09=2001-282=2001-W41-2"- , "52192=2001-10-10=2001-283=2001-W41-3"- , "52193=2001-10-11=2001-284=2001-W41-4"- , "52194=2001-10-12=2001-285=2001-W41-5"- , "52195=2001-10-13=2001-286=2001-W41-6"- , "52196=2001-10-14=2001-287=2001-W41-7"- , "52197=2001-10-15=2001-288=2001-W42-1"- , "52198=2001-10-16=2001-289=2001-W42-2"- , "52199=2001-10-17=2001-290=2001-W42-3"- , "52200=2001-10-18=2001-291=2001-W42-4"- , "52201=2001-10-19=2001-292=2001-W42-5"- , "52202=2001-10-20=2001-293=2001-W42-6"- , "52203=2001-10-21=2001-294=2001-W42-7"- , "52204=2001-10-22=2001-295=2001-W43-1"- , "52205=2001-10-23=2001-296=2001-W43-2"- , "52206=2001-10-24=2001-297=2001-W43-3"- , "52207=2001-10-25=2001-298=2001-W43-4"- , "52208=2001-10-26=2001-299=2001-W43-5"- , "52209=2001-10-27=2001-300=2001-W43-6"- , "52210=2001-10-28=2001-301=2001-W43-7"- , "52211=2001-10-29=2001-302=2001-W44-1"- , "52212=2001-10-30=2001-303=2001-W44-2"- , "52213=2001-10-31=2001-304=2001-W44-3"- , "52214=2001-11-01=2001-305=2001-W44-4"- , "52215=2001-11-02=2001-306=2001-W44-5"- , "52216=2001-11-03=2001-307=2001-W44-6"- , "52217=2001-11-04=2001-308=2001-W44-7"- , "52218=2001-11-05=2001-309=2001-W45-1"- , "52219=2001-11-06=2001-310=2001-W45-2"- , "52220=2001-11-07=2001-311=2001-W45-3"- , "52221=2001-11-08=2001-312=2001-W45-4"- , "52222=2001-11-09=2001-313=2001-W45-5"- , "52223=2001-11-10=2001-314=2001-W45-6"- , "52224=2001-11-11=2001-315=2001-W45-7"- , "52225=2001-11-12=2001-316=2001-W46-1"- , "52226=2001-11-13=2001-317=2001-W46-2"- , "52227=2001-11-14=2001-318=2001-W46-3"- , "52228=2001-11-15=2001-319=2001-W46-4"- , "52229=2001-11-16=2001-320=2001-W46-5"- , "52230=2001-11-17=2001-321=2001-W46-6"- , "52231=2001-11-18=2001-322=2001-W46-7"- , "52232=2001-11-19=2001-323=2001-W47-1"- , "52233=2001-11-20=2001-324=2001-W47-2"- , "52234=2001-11-21=2001-325=2001-W47-3"- , "52235=2001-11-22=2001-326=2001-W47-4"- , "52236=2001-11-23=2001-327=2001-W47-5"- , "52237=2001-11-24=2001-328=2001-W47-6"- , "52238=2001-11-25=2001-329=2001-W47-7"- , "52239=2001-11-26=2001-330=2001-W48-1"- , "52240=2001-11-27=2001-331=2001-W48-2"- , "52241=2001-11-28=2001-332=2001-W48-3"- , "52242=2001-11-29=2001-333=2001-W48-4"- , "52243=2001-11-30=2001-334=2001-W48-5"- , "52244=2001-12-01=2001-335=2001-W48-6"- , "52245=2001-12-02=2001-336=2001-W48-7"- , "52246=2001-12-03=2001-337=2001-W49-1"- , "52247=2001-12-04=2001-338=2001-W49-2"- , "52248=2001-12-05=2001-339=2001-W49-3"- , "52249=2001-12-06=2001-340=2001-W49-4"- , "52250=2001-12-07=2001-341=2001-W49-5"- , "52251=2001-12-08=2001-342=2001-W49-6"- , "52252=2001-12-09=2001-343=2001-W49-7"- , "52253=2001-12-10=2001-344=2001-W50-1"- , "52254=2001-12-11=2001-345=2001-W50-2"- , "52255=2001-12-12=2001-346=2001-W50-3"- , "52256=2001-12-13=2001-347=2001-W50-4"- , "52257=2001-12-14=2001-348=2001-W50-5"- , "52258=2001-12-15=2001-349=2001-W50-6"- , "52259=2001-12-16=2001-350=2001-W50-7"- , "52260=2001-12-17=2001-351=2001-W51-1"- , "52261=2001-12-18=2001-352=2001-W51-2"- , "52262=2001-12-19=2001-353=2001-W51-3"- , "52263=2001-12-20=2001-354=2001-W51-4"- , "52264=2001-12-21=2001-355=2001-W51-5"- , "52265=2001-12-22=2001-356=2001-W51-6"- , "52266=2001-12-23=2001-357=2001-W51-7"- , "52267=2001-12-24=2001-358=2001-W52-1"- , "52268=2001-12-25=2001-359=2001-W52-2"- , "52269=2001-12-26=2001-360=2001-W52-3"- , "52270=2001-12-27=2001-361=2001-W52-4"- , "52271=2001-12-28=2001-362=2001-W52-5"- , "52272=2001-12-29=2001-363=2001-W52-6"- , "52273=2001-12-30=2001-364=2001-W52-7"- , "52274=2001-12-31=2001-365=2002-W01-1"- , "52275=2002-01-01=2002-001=2002-W01-2"- , "52276=2002-01-02=2002-002=2002-W01-3"- , "52277=2002-01-03=2002-003=2002-W01-4"- , "52278=2002-01-04=2002-004=2002-W01-5"- , "52279=2002-01-05=2002-005=2002-W01-6"- , "52280=2002-01-06=2002-006=2002-W01-7"- , ""- , "51178=1998-12-31=1998-365=1998-W53-4"- , ""- , "1998-12-31 23:59:60.5"- , "51178,86400.5s"- , "1998-12-31 15:59:60.5"- , "51178,86400.5s"- , ""- , "2000-03-01 00:00:00"- , "2000-03-01 12:00:00"- , "2000-02-29 16:00:00"- , "2000-03-01 04:00:00"- , "2000-03-01 08:00:00"- , "2000-03-01 20:00:00"- , ""- , "12:34:56.789"- , "12:34:56.789123"- , "12:34:56.789123456"- , "12:34:56.789123456789"- , if is64Bit- then "-9223372036854775808:00:00"- else "-2147483648:00:00"- , ""- ]+ if toInteger (maxBound :: Int) == toInteger (maxBound :: Int32)+ then False+ else+ if toInteger (maxBound :: Int) == toInteger (maxBound :: Int64)+ then True+ else error "unrecognised Int size"++testTimeRef :: String+testTimeRef =+ unlines+ [ "-678950=-0001-12-23=-0001-357=-0001-W51-4",+ "-678949=-0001-12-24=-0001-358=-0001-W51-5",+ "-678948=-0001-12-25=-0001-359=-0001-W51-6",+ "-678947=-0001-12-26=-0001-360=-0001-W51-7",+ "-678946=-0001-12-27=-0001-361=-0001-W52-1",+ "-678945=-0001-12-28=-0001-362=-0001-W52-2",+ "-678944=-0001-12-29=-0001-363=-0001-W52-3",+ "-678943=-0001-12-30=-0001-364=-0001-W52-4",+ "-678942=-0001-12-31=-0001-365=-0001-W52-5",+ "-678941=0000-01-01=0000-001=-0001-W52-6",+ "-678940=0000-01-02=0000-002=-0001-W52-7",+ "-678939=0000-01-03=0000-003=0000-W01-1",+ "-678938=0000-01-04=0000-004=0000-W01-2",+ "-678937=0000-01-05=0000-005=0000-W01-3",+ "-678936=0000-01-06=0000-006=0000-W01-4",+ "-678935=0000-01-07=0000-007=0000-W01-5",+ "-678934=0000-01-08=0000-008=0000-W01-6",+ "-678933=0000-01-09=0000-009=0000-W01-7",+ "-678932=0000-01-10=0000-010=0000-W02-1",+ "-678931=0000-01-11=0000-011=0000-W02-2",+ "-678930=0000-01-12=0000-012=0000-W02-3",+ "-313710=0999-12-20=0999-354=0999-W51-5",+ "-313709=0999-12-21=0999-355=0999-W51-6",+ "-313708=0999-12-22=0999-356=0999-W51-7",+ "-313707=0999-12-23=0999-357=0999-W52-1",+ "-313706=0999-12-24=0999-358=0999-W52-2",+ "-313705=0999-12-25=0999-359=0999-W52-3",+ "-313704=0999-12-26=0999-360=0999-W52-4",+ "-313703=0999-12-27=0999-361=0999-W52-5",+ "-313702=0999-12-28=0999-362=0999-W52-6",+ "-313701=0999-12-29=0999-363=0999-W52-7",+ "-313700=0999-12-30=0999-364=1000-W01-1",+ "-313699=0999-12-31=0999-365=1000-W01-2",+ "-313698=1000-01-01=1000-001=1000-W01-3",+ "-313697=1000-01-02=1000-002=1000-W01-4",+ "-313696=1000-01-03=1000-003=1000-W01-5",+ "-313695=1000-01-04=1000-004=1000-W01-6",+ "-313694=1000-01-05=1000-005=1000-W01-7",+ "-313693=1000-01-06=1000-006=1000-W02-1",+ "-313692=1000-01-07=1000-007=1000-W02-2",+ "-313691=1000-01-08=1000-008=1000-W02-3",+ "-313690=1000-01-09=1000-009=1000-W02-4",+ "-30=1858-10-18=1858-291=1858-W42-1",+ "-29=1858-10-19=1858-292=1858-W42-2",+ "-28=1858-10-20=1858-293=1858-W42-3",+ "-27=1858-10-21=1858-294=1858-W42-4",+ "-26=1858-10-22=1858-295=1858-W42-5",+ "-25=1858-10-23=1858-296=1858-W42-6",+ "-24=1858-10-24=1858-297=1858-W42-7",+ "-23=1858-10-25=1858-298=1858-W43-1",+ "-22=1858-10-26=1858-299=1858-W43-2",+ "-21=1858-10-27=1858-300=1858-W43-3",+ "-20=1858-10-28=1858-301=1858-W43-4",+ "-19=1858-10-29=1858-302=1858-W43-5",+ "-18=1858-10-30=1858-303=1858-W43-6",+ "-17=1858-10-31=1858-304=1858-W43-7",+ "-16=1858-11-01=1858-305=1858-W44-1",+ "-15=1858-11-02=1858-306=1858-W44-2",+ "-14=1858-11-03=1858-307=1858-W44-3",+ "-13=1858-11-04=1858-308=1858-W44-4",+ "-12=1858-11-05=1858-309=1858-W44-5",+ "-11=1858-11-06=1858-310=1858-W44-6",+ "-10=1858-11-07=1858-311=1858-W44-7",+ "-9=1858-11-08=1858-312=1858-W45-1",+ "-8=1858-11-09=1858-313=1858-W45-2",+ "-7=1858-11-10=1858-314=1858-W45-3",+ "-6=1858-11-11=1858-315=1858-W45-4",+ "-5=1858-11-12=1858-316=1858-W45-5",+ "-4=1858-11-13=1858-317=1858-W45-6",+ "-3=1858-11-14=1858-318=1858-W45-7",+ "-2=1858-11-15=1858-319=1858-W46-1",+ "-1=1858-11-16=1858-320=1858-W46-2",+ "0=1858-11-17=1858-321=1858-W46-3",+ "1=1858-11-18=1858-322=1858-W46-4",+ "2=1858-11-19=1858-323=1858-W46-5",+ "3=1858-11-20=1858-324=1858-W46-6",+ "4=1858-11-21=1858-325=1858-W46-7",+ "5=1858-11-22=1858-326=1858-W47-1",+ "6=1858-11-23=1858-327=1858-W47-2",+ "7=1858-11-24=1858-328=1858-W47-3",+ "8=1858-11-25=1858-329=1858-W47-4",+ "9=1858-11-26=1858-330=1858-W47-5",+ "10=1858-11-27=1858-331=1858-W47-6",+ "11=1858-11-28=1858-332=1858-W47-7",+ "12=1858-11-29=1858-333=1858-W48-1",+ "13=1858-11-30=1858-334=1858-W48-2",+ "14=1858-12-01=1858-335=1858-W48-3",+ "15=1858-12-02=1858-336=1858-W48-4",+ "16=1858-12-03=1858-337=1858-W48-5",+ "17=1858-12-04=1858-338=1858-W48-6",+ "18=1858-12-05=1858-339=1858-W48-7",+ "19=1858-12-06=1858-340=1858-W49-1",+ "20=1858-12-07=1858-341=1858-W49-2",+ "21=1858-12-08=1858-342=1858-W49-3",+ "22=1858-12-09=1858-343=1858-W49-4",+ "23=1858-12-10=1858-344=1858-W49-5",+ "24=1858-12-11=1858-345=1858-W49-6",+ "25=1858-12-12=1858-346=1858-W49-7",+ "26=1858-12-13=1858-347=1858-W50-1",+ "27=1858-12-14=1858-348=1858-W50-2",+ "28=1858-12-15=1858-349=1858-W50-3",+ "29=1858-12-16=1858-350=1858-W50-4",+ "30=1858-12-17=1858-351=1858-W50-5",+ "40000=1968-05-24=1968-145=1968-W21-5",+ "50000=1995-10-10=1995-283=1995-W41-2",+ "15078=1900-02-28=1900-059=1900-W09-3",+ "15079=1900-03-01=1900-060=1900-W09-4",+ "44297=1980-02-28=1980-059=1980-W09-4",+ "44298=1980-02-29=1980-060=1980-W09-5",+ "44299=1980-03-01=1980-061=1980-W09-6",+ "47950=1990-02-28=1990-059=1990-W09-3",+ "47951=1990-03-01=1990-060=1990-W09-4",+ "51602=2000-02-28=2000-059=2000-W09-1",+ "51603=2000-02-29=2000-060=2000-W09-2",+ "51604=2000-03-01=2000-061=2000-W09-3",+ "51540=1999-12-28=1999-362=1999-W52-2",+ "51541=1999-12-29=1999-363=1999-W52-3",+ "51542=1999-12-30=1999-364=1999-W52-4",+ "51543=1999-12-31=1999-365=1999-W52-5",+ "51544=2000-01-01=2000-001=1999-W52-6",+ "51545=2000-01-02=2000-002=1999-W52-7",+ "51546=2000-01-03=2000-003=2000-W01-1",+ "51547=2000-01-04=2000-004=2000-W01-2",+ "51548=2000-01-05=2000-005=2000-W01-3",+ "51549=2000-01-06=2000-006=2000-W01-4",+ "51550=2000-01-07=2000-007=2000-W01-5",+ "51551=2000-01-08=2000-008=2000-W01-6",+ "51552=2000-01-09=2000-009=2000-W01-7",+ "51553=2000-01-10=2000-010=2000-W02-1",+ "51554=2000-01-11=2000-011=2000-W02-2",+ "51555=2000-01-12=2000-012=2000-W02-3",+ "51556=2000-01-13=2000-013=2000-W02-4",+ "51557=2000-01-14=2000-014=2000-W02-5",+ "51558=2000-01-15=2000-015=2000-W02-6",+ "51559=2000-01-16=2000-016=2000-W02-7",+ "51560=2000-01-17=2000-017=2000-W03-1",+ "51561=2000-01-18=2000-018=2000-W03-2",+ "51562=2000-01-19=2000-019=2000-W03-3",+ "51563=2000-01-20=2000-020=2000-W03-4",+ "51564=2000-01-21=2000-021=2000-W03-5",+ "51565=2000-01-22=2000-022=2000-W03-6",+ "51566=2000-01-23=2000-023=2000-W03-7",+ "51567=2000-01-24=2000-024=2000-W04-1",+ "51568=2000-01-25=2000-025=2000-W04-2",+ "51569=2000-01-26=2000-026=2000-W04-3",+ "51570=2000-01-27=2000-027=2000-W04-4",+ "51571=2000-01-28=2000-028=2000-W04-5",+ "51572=2000-01-29=2000-029=2000-W04-6",+ "51573=2000-01-30=2000-030=2000-W04-7",+ "51574=2000-01-31=2000-031=2000-W05-1",+ "51575=2000-02-01=2000-032=2000-W05-2",+ "51576=2000-02-02=2000-033=2000-W05-3",+ "51577=2000-02-03=2000-034=2000-W05-4",+ "51578=2000-02-04=2000-035=2000-W05-5",+ "51579=2000-02-05=2000-036=2000-W05-6",+ "51580=2000-02-06=2000-037=2000-W05-7",+ "51581=2000-02-07=2000-038=2000-W06-1",+ "51582=2000-02-08=2000-039=2000-W06-2",+ "51583=2000-02-09=2000-040=2000-W06-3",+ "51584=2000-02-10=2000-041=2000-W06-4",+ "51585=2000-02-11=2000-042=2000-W06-5",+ "51586=2000-02-12=2000-043=2000-W06-6",+ "51587=2000-02-13=2000-044=2000-W06-7",+ "51588=2000-02-14=2000-045=2000-W07-1",+ "51589=2000-02-15=2000-046=2000-W07-2",+ "51590=2000-02-16=2000-047=2000-W07-3",+ "51591=2000-02-17=2000-048=2000-W07-4",+ "51592=2000-02-18=2000-049=2000-W07-5",+ "51593=2000-02-19=2000-050=2000-W07-6",+ "51594=2000-02-20=2000-051=2000-W07-7",+ "51595=2000-02-21=2000-052=2000-W08-1",+ "51596=2000-02-22=2000-053=2000-W08-2",+ "51597=2000-02-23=2000-054=2000-W08-3",+ "51598=2000-02-24=2000-055=2000-W08-4",+ "51599=2000-02-25=2000-056=2000-W08-5",+ "51600=2000-02-26=2000-057=2000-W08-6",+ "51601=2000-02-27=2000-058=2000-W08-7",+ "51602=2000-02-28=2000-059=2000-W09-1",+ "51603=2000-02-29=2000-060=2000-W09-2",+ "51604=2000-03-01=2000-061=2000-W09-3",+ "51605=2000-03-02=2000-062=2000-W09-4",+ "51606=2000-03-03=2000-063=2000-W09-5",+ "51607=2000-03-04=2000-064=2000-W09-6",+ "51608=2000-03-05=2000-065=2000-W09-7",+ "51609=2000-03-06=2000-066=2000-W10-1",+ "51610=2000-03-07=2000-067=2000-W10-2",+ "51611=2000-03-08=2000-068=2000-W10-3",+ "51612=2000-03-09=2000-069=2000-W10-4",+ "51613=2000-03-10=2000-070=2000-W10-5",+ "51614=2000-03-11=2000-071=2000-W10-6",+ "51615=2000-03-12=2000-072=2000-W10-7",+ "51616=2000-03-13=2000-073=2000-W11-1",+ "51617=2000-03-14=2000-074=2000-W11-2",+ "51618=2000-03-15=2000-075=2000-W11-3",+ "51619=2000-03-16=2000-076=2000-W11-4",+ "51620=2000-03-17=2000-077=2000-W11-5",+ "51621=2000-03-18=2000-078=2000-W11-6",+ "51622=2000-03-19=2000-079=2000-W11-7",+ "51623=2000-03-20=2000-080=2000-W12-1",+ "51624=2000-03-21=2000-081=2000-W12-2",+ "51625=2000-03-22=2000-082=2000-W12-3",+ "51626=2000-03-23=2000-083=2000-W12-4",+ "51627=2000-03-24=2000-084=2000-W12-5",+ "51628=2000-03-25=2000-085=2000-W12-6",+ "51629=2000-03-26=2000-086=2000-W12-7",+ "51630=2000-03-27=2000-087=2000-W13-1",+ "51631=2000-03-28=2000-088=2000-W13-2",+ "51632=2000-03-29=2000-089=2000-W13-3",+ "51633=2000-03-30=2000-090=2000-W13-4",+ "51634=2000-03-31=2000-091=2000-W13-5",+ "51635=2000-04-01=2000-092=2000-W13-6",+ "51636=2000-04-02=2000-093=2000-W13-7",+ "51637=2000-04-03=2000-094=2000-W14-1",+ "51638=2000-04-04=2000-095=2000-W14-2",+ "51639=2000-04-05=2000-096=2000-W14-3",+ "51640=2000-04-06=2000-097=2000-W14-4",+ "51641=2000-04-07=2000-098=2000-W14-5",+ "51642=2000-04-08=2000-099=2000-W14-6",+ "51643=2000-04-09=2000-100=2000-W14-7",+ "51644=2000-04-10=2000-101=2000-W15-1",+ "51645=2000-04-11=2000-102=2000-W15-2",+ "51646=2000-04-12=2000-103=2000-W15-3",+ "51647=2000-04-13=2000-104=2000-W15-4",+ "51648=2000-04-14=2000-105=2000-W15-5",+ "51649=2000-04-15=2000-106=2000-W15-6",+ "51650=2000-04-16=2000-107=2000-W15-7",+ "51651=2000-04-17=2000-108=2000-W16-1",+ "51652=2000-04-18=2000-109=2000-W16-2",+ "51653=2000-04-19=2000-110=2000-W16-3",+ "51654=2000-04-20=2000-111=2000-W16-4",+ "51655=2000-04-21=2000-112=2000-W16-5",+ "51656=2000-04-22=2000-113=2000-W16-6",+ "51657=2000-04-23=2000-114=2000-W16-7",+ "51658=2000-04-24=2000-115=2000-W17-1",+ "51659=2000-04-25=2000-116=2000-W17-2",+ "51660=2000-04-26=2000-117=2000-W17-3",+ "51661=2000-04-27=2000-118=2000-W17-4",+ "51662=2000-04-28=2000-119=2000-W17-5",+ "51663=2000-04-29=2000-120=2000-W17-6",+ "51664=2000-04-30=2000-121=2000-W17-7",+ "51665=2000-05-01=2000-122=2000-W18-1",+ "51666=2000-05-02=2000-123=2000-W18-2",+ "51667=2000-05-03=2000-124=2000-W18-3",+ "51668=2000-05-04=2000-125=2000-W18-4",+ "51669=2000-05-05=2000-126=2000-W18-5",+ "51670=2000-05-06=2000-127=2000-W18-6",+ "51671=2000-05-07=2000-128=2000-W18-7",+ "51672=2000-05-08=2000-129=2000-W19-1",+ "51673=2000-05-09=2000-130=2000-W19-2",+ "51674=2000-05-10=2000-131=2000-W19-3",+ "51675=2000-05-11=2000-132=2000-W19-4",+ "51676=2000-05-12=2000-133=2000-W19-5",+ "51677=2000-05-13=2000-134=2000-W19-6",+ "51678=2000-05-14=2000-135=2000-W19-7",+ "51679=2000-05-15=2000-136=2000-W20-1",+ "51680=2000-05-16=2000-137=2000-W20-2",+ "51681=2000-05-17=2000-138=2000-W20-3",+ "51682=2000-05-18=2000-139=2000-W20-4",+ "51683=2000-05-19=2000-140=2000-W20-5",+ "51684=2000-05-20=2000-141=2000-W20-6",+ "51685=2000-05-21=2000-142=2000-W20-7",+ "51686=2000-05-22=2000-143=2000-W21-1",+ "51687=2000-05-23=2000-144=2000-W21-2",+ "51688=2000-05-24=2000-145=2000-W21-3",+ "51689=2000-05-25=2000-146=2000-W21-4",+ "51690=2000-05-26=2000-147=2000-W21-5",+ "51691=2000-05-27=2000-148=2000-W21-6",+ "51692=2000-05-28=2000-149=2000-W21-7",+ "51693=2000-05-29=2000-150=2000-W22-1",+ "51694=2000-05-30=2000-151=2000-W22-2",+ "51695=2000-05-31=2000-152=2000-W22-3",+ "51696=2000-06-01=2000-153=2000-W22-4",+ "51697=2000-06-02=2000-154=2000-W22-5",+ "51698=2000-06-03=2000-155=2000-W22-6",+ "51699=2000-06-04=2000-156=2000-W22-7",+ "51700=2000-06-05=2000-157=2000-W23-1",+ "51701=2000-06-06=2000-158=2000-W23-2",+ "51702=2000-06-07=2000-159=2000-W23-3",+ "51703=2000-06-08=2000-160=2000-W23-4",+ "51704=2000-06-09=2000-161=2000-W23-5",+ "51705=2000-06-10=2000-162=2000-W23-6",+ "51706=2000-06-11=2000-163=2000-W23-7",+ "51707=2000-06-12=2000-164=2000-W24-1",+ "51708=2000-06-13=2000-165=2000-W24-2",+ "51709=2000-06-14=2000-166=2000-W24-3",+ "51710=2000-06-15=2000-167=2000-W24-4",+ "51711=2000-06-16=2000-168=2000-W24-5",+ "51712=2000-06-17=2000-169=2000-W24-6",+ "51713=2000-06-18=2000-170=2000-W24-7",+ "51714=2000-06-19=2000-171=2000-W25-1",+ "51715=2000-06-20=2000-172=2000-W25-2",+ "51716=2000-06-21=2000-173=2000-W25-3",+ "51717=2000-06-22=2000-174=2000-W25-4",+ "51718=2000-06-23=2000-175=2000-W25-5",+ "51719=2000-06-24=2000-176=2000-W25-6",+ "51720=2000-06-25=2000-177=2000-W25-7",+ "51721=2000-06-26=2000-178=2000-W26-1",+ "51722=2000-06-27=2000-179=2000-W26-2",+ "51723=2000-06-28=2000-180=2000-W26-3",+ "51724=2000-06-29=2000-181=2000-W26-4",+ "51725=2000-06-30=2000-182=2000-W26-5",+ "51726=2000-07-01=2000-183=2000-W26-6",+ "51727=2000-07-02=2000-184=2000-W26-7",+ "51728=2000-07-03=2000-185=2000-W27-1",+ "51729=2000-07-04=2000-186=2000-W27-2",+ "51730=2000-07-05=2000-187=2000-W27-3",+ "51731=2000-07-06=2000-188=2000-W27-4",+ "51732=2000-07-07=2000-189=2000-W27-5",+ "51733=2000-07-08=2000-190=2000-W27-6",+ "51734=2000-07-09=2000-191=2000-W27-7",+ "51735=2000-07-10=2000-192=2000-W28-1",+ "51736=2000-07-11=2000-193=2000-W28-2",+ "51737=2000-07-12=2000-194=2000-W28-3",+ "51738=2000-07-13=2000-195=2000-W28-4",+ "51739=2000-07-14=2000-196=2000-W28-5",+ "51740=2000-07-15=2000-197=2000-W28-6",+ "51741=2000-07-16=2000-198=2000-W28-7",+ "51742=2000-07-17=2000-199=2000-W29-1",+ "51743=2000-07-18=2000-200=2000-W29-2",+ "51744=2000-07-19=2000-201=2000-W29-3",+ "51745=2000-07-20=2000-202=2000-W29-4",+ "51746=2000-07-21=2000-203=2000-W29-5",+ "51747=2000-07-22=2000-204=2000-W29-6",+ "51748=2000-07-23=2000-205=2000-W29-7",+ "51749=2000-07-24=2000-206=2000-W30-1",+ "51750=2000-07-25=2000-207=2000-W30-2",+ "51751=2000-07-26=2000-208=2000-W30-3",+ "51752=2000-07-27=2000-209=2000-W30-4",+ "51753=2000-07-28=2000-210=2000-W30-5",+ "51754=2000-07-29=2000-211=2000-W30-6",+ "51755=2000-07-30=2000-212=2000-W30-7",+ "51756=2000-07-31=2000-213=2000-W31-1",+ "51757=2000-08-01=2000-214=2000-W31-2",+ "51758=2000-08-02=2000-215=2000-W31-3",+ "51759=2000-08-03=2000-216=2000-W31-4",+ "51760=2000-08-04=2000-217=2000-W31-5",+ "51761=2000-08-05=2000-218=2000-W31-6",+ "51762=2000-08-06=2000-219=2000-W31-7",+ "51763=2000-08-07=2000-220=2000-W32-1",+ "51764=2000-08-08=2000-221=2000-W32-2",+ "51765=2000-08-09=2000-222=2000-W32-3",+ "51766=2000-08-10=2000-223=2000-W32-4",+ "51767=2000-08-11=2000-224=2000-W32-5",+ "51768=2000-08-12=2000-225=2000-W32-6",+ "51769=2000-08-13=2000-226=2000-W32-7",+ "51770=2000-08-14=2000-227=2000-W33-1",+ "51771=2000-08-15=2000-228=2000-W33-2",+ "51772=2000-08-16=2000-229=2000-W33-3",+ "51773=2000-08-17=2000-230=2000-W33-4",+ "51774=2000-08-18=2000-231=2000-W33-5",+ "51775=2000-08-19=2000-232=2000-W33-6",+ "51776=2000-08-20=2000-233=2000-W33-7",+ "51777=2000-08-21=2000-234=2000-W34-1",+ "51778=2000-08-22=2000-235=2000-W34-2",+ "51779=2000-08-23=2000-236=2000-W34-3",+ "51780=2000-08-24=2000-237=2000-W34-4",+ "51781=2000-08-25=2000-238=2000-W34-5",+ "51782=2000-08-26=2000-239=2000-W34-6",+ "51783=2000-08-27=2000-240=2000-W34-7",+ "51784=2000-08-28=2000-241=2000-W35-1",+ "51785=2000-08-29=2000-242=2000-W35-2",+ "51786=2000-08-30=2000-243=2000-W35-3",+ "51787=2000-08-31=2000-244=2000-W35-4",+ "51788=2000-09-01=2000-245=2000-W35-5",+ "51789=2000-09-02=2000-246=2000-W35-6",+ "51790=2000-09-03=2000-247=2000-W35-7",+ "51791=2000-09-04=2000-248=2000-W36-1",+ "51792=2000-09-05=2000-249=2000-W36-2",+ "51793=2000-09-06=2000-250=2000-W36-3",+ "51794=2000-09-07=2000-251=2000-W36-4",+ "51795=2000-09-08=2000-252=2000-W36-5",+ "51796=2000-09-09=2000-253=2000-W36-6",+ "51797=2000-09-10=2000-254=2000-W36-7",+ "51798=2000-09-11=2000-255=2000-W37-1",+ "51799=2000-09-12=2000-256=2000-W37-2",+ "51800=2000-09-13=2000-257=2000-W37-3",+ "51801=2000-09-14=2000-258=2000-W37-4",+ "51802=2000-09-15=2000-259=2000-W37-5",+ "51803=2000-09-16=2000-260=2000-W37-6",+ "51804=2000-09-17=2000-261=2000-W37-7",+ "51805=2000-09-18=2000-262=2000-W38-1",+ "51806=2000-09-19=2000-263=2000-W38-2",+ "51807=2000-09-20=2000-264=2000-W38-3",+ "51808=2000-09-21=2000-265=2000-W38-4",+ "51809=2000-09-22=2000-266=2000-W38-5",+ "51810=2000-09-23=2000-267=2000-W38-6",+ "51811=2000-09-24=2000-268=2000-W38-7",+ "51812=2000-09-25=2000-269=2000-W39-1",+ "51813=2000-09-26=2000-270=2000-W39-2",+ "51814=2000-09-27=2000-271=2000-W39-3",+ "51815=2000-09-28=2000-272=2000-W39-4",+ "51816=2000-09-29=2000-273=2000-W39-5",+ "51817=2000-09-30=2000-274=2000-W39-6",+ "51818=2000-10-01=2000-275=2000-W39-7",+ "51819=2000-10-02=2000-276=2000-W40-1",+ "51820=2000-10-03=2000-277=2000-W40-2",+ "51821=2000-10-04=2000-278=2000-W40-3",+ "51822=2000-10-05=2000-279=2000-W40-4",+ "51823=2000-10-06=2000-280=2000-W40-5",+ "51824=2000-10-07=2000-281=2000-W40-6",+ "51825=2000-10-08=2000-282=2000-W40-7",+ "51826=2000-10-09=2000-283=2000-W41-1",+ "51827=2000-10-10=2000-284=2000-W41-2",+ "51828=2000-10-11=2000-285=2000-W41-3",+ "51829=2000-10-12=2000-286=2000-W41-4",+ "51830=2000-10-13=2000-287=2000-W41-5",+ "51831=2000-10-14=2000-288=2000-W41-6",+ "51832=2000-10-15=2000-289=2000-W41-7",+ "51833=2000-10-16=2000-290=2000-W42-1",+ "51834=2000-10-17=2000-291=2000-W42-2",+ "51835=2000-10-18=2000-292=2000-W42-3",+ "51836=2000-10-19=2000-293=2000-W42-4",+ "51837=2000-10-20=2000-294=2000-W42-5",+ "51838=2000-10-21=2000-295=2000-W42-6",+ "51839=2000-10-22=2000-296=2000-W42-7",+ "51840=2000-10-23=2000-297=2000-W43-1",+ "51841=2000-10-24=2000-298=2000-W43-2",+ "51842=2000-10-25=2000-299=2000-W43-3",+ "51843=2000-10-26=2000-300=2000-W43-4",+ "51844=2000-10-27=2000-301=2000-W43-5",+ "51845=2000-10-28=2000-302=2000-W43-6",+ "51846=2000-10-29=2000-303=2000-W43-7",+ "51847=2000-10-30=2000-304=2000-W44-1",+ "51848=2000-10-31=2000-305=2000-W44-2",+ "51849=2000-11-01=2000-306=2000-W44-3",+ "51850=2000-11-02=2000-307=2000-W44-4",+ "51851=2000-11-03=2000-308=2000-W44-5",+ "51852=2000-11-04=2000-309=2000-W44-6",+ "51853=2000-11-05=2000-310=2000-W44-7",+ "51854=2000-11-06=2000-311=2000-W45-1",+ "51855=2000-11-07=2000-312=2000-W45-2",+ "51856=2000-11-08=2000-313=2000-W45-3",+ "51857=2000-11-09=2000-314=2000-W45-4",+ "51858=2000-11-10=2000-315=2000-W45-5",+ "51859=2000-11-11=2000-316=2000-W45-6",+ "51860=2000-11-12=2000-317=2000-W45-7",+ "51861=2000-11-13=2000-318=2000-W46-1",+ "51862=2000-11-14=2000-319=2000-W46-2",+ "51863=2000-11-15=2000-320=2000-W46-3",+ "51864=2000-11-16=2000-321=2000-W46-4",+ "51865=2000-11-17=2000-322=2000-W46-5",+ "51866=2000-11-18=2000-323=2000-W46-6",+ "51867=2000-11-19=2000-324=2000-W46-7",+ "51868=2000-11-20=2000-325=2000-W47-1",+ "51869=2000-11-21=2000-326=2000-W47-2",+ "51870=2000-11-22=2000-327=2000-W47-3",+ "51871=2000-11-23=2000-328=2000-W47-4",+ "51872=2000-11-24=2000-329=2000-W47-5",+ "51873=2000-11-25=2000-330=2000-W47-6",+ "51874=2000-11-26=2000-331=2000-W47-7",+ "51875=2000-11-27=2000-332=2000-W48-1",+ "51876=2000-11-28=2000-333=2000-W48-2",+ "51877=2000-11-29=2000-334=2000-W48-3",+ "51878=2000-11-30=2000-335=2000-W48-4",+ "51879=2000-12-01=2000-336=2000-W48-5",+ "51880=2000-12-02=2000-337=2000-W48-6",+ "51881=2000-12-03=2000-338=2000-W48-7",+ "51882=2000-12-04=2000-339=2000-W49-1",+ "51883=2000-12-05=2000-340=2000-W49-2",+ "51884=2000-12-06=2000-341=2000-W49-3",+ "51885=2000-12-07=2000-342=2000-W49-4",+ "51886=2000-12-08=2000-343=2000-W49-5",+ "51887=2000-12-09=2000-344=2000-W49-6",+ "51888=2000-12-10=2000-345=2000-W49-7",+ "51889=2000-12-11=2000-346=2000-W50-1",+ "51890=2000-12-12=2000-347=2000-W50-2",+ "51891=2000-12-13=2000-348=2000-W50-3",+ "51892=2000-12-14=2000-349=2000-W50-4",+ "51893=2000-12-15=2000-350=2000-W50-5",+ "51894=2000-12-16=2000-351=2000-W50-6",+ "51895=2000-12-17=2000-352=2000-W50-7",+ "51896=2000-12-18=2000-353=2000-W51-1",+ "51897=2000-12-19=2000-354=2000-W51-2",+ "51898=2000-12-20=2000-355=2000-W51-3",+ "51899=2000-12-21=2000-356=2000-W51-4",+ "51900=2000-12-22=2000-357=2000-W51-5",+ "51901=2000-12-23=2000-358=2000-W51-6",+ "51902=2000-12-24=2000-359=2000-W51-7",+ "51903=2000-12-25=2000-360=2000-W52-1",+ "51904=2000-12-26=2000-361=2000-W52-2",+ "51905=2000-12-27=2000-362=2000-W52-3",+ "51906=2000-12-28=2000-363=2000-W52-4",+ "51907=2000-12-29=2000-364=2000-W52-5",+ "51908=2000-12-30=2000-365=2000-W52-6",+ "51909=2000-12-31=2000-366=2000-W52-7",+ "51910=2001-01-01=2001-001=2001-W01-1",+ "51911=2001-01-02=2001-002=2001-W01-2",+ "51912=2001-01-03=2001-003=2001-W01-3",+ "51913=2001-01-04=2001-004=2001-W01-4",+ "51914=2001-01-05=2001-005=2001-W01-5",+ "51915=2001-01-06=2001-006=2001-W01-6",+ "51916=2001-01-07=2001-007=2001-W01-7",+ "51917=2001-01-08=2001-008=2001-W02-1",+ "51918=2001-01-09=2001-009=2001-W02-2",+ "51919=2001-01-10=2001-010=2001-W02-3",+ "51920=2001-01-11=2001-011=2001-W02-4",+ "51921=2001-01-12=2001-012=2001-W02-5",+ "51922=2001-01-13=2001-013=2001-W02-6",+ "51923=2001-01-14=2001-014=2001-W02-7",+ "51924=2001-01-15=2001-015=2001-W03-1",+ "51925=2001-01-16=2001-016=2001-W03-2",+ "51926=2001-01-17=2001-017=2001-W03-3",+ "51927=2001-01-18=2001-018=2001-W03-4",+ "51928=2001-01-19=2001-019=2001-W03-5",+ "51929=2001-01-20=2001-020=2001-W03-6",+ "51930=2001-01-21=2001-021=2001-W03-7",+ "51931=2001-01-22=2001-022=2001-W04-1",+ "51932=2001-01-23=2001-023=2001-W04-2",+ "51933=2001-01-24=2001-024=2001-W04-3",+ "51934=2001-01-25=2001-025=2001-W04-4",+ "51935=2001-01-26=2001-026=2001-W04-5",+ "51936=2001-01-27=2001-027=2001-W04-6",+ "51937=2001-01-28=2001-028=2001-W04-7",+ "51938=2001-01-29=2001-029=2001-W05-1",+ "51939=2001-01-30=2001-030=2001-W05-2",+ "51940=2001-01-31=2001-031=2001-W05-3",+ "51941=2001-02-01=2001-032=2001-W05-4",+ "51942=2001-02-02=2001-033=2001-W05-5",+ "51943=2001-02-03=2001-034=2001-W05-6",+ "51944=2001-02-04=2001-035=2001-W05-7",+ "51945=2001-02-05=2001-036=2001-W06-1",+ "51946=2001-02-06=2001-037=2001-W06-2",+ "51947=2001-02-07=2001-038=2001-W06-3",+ "51948=2001-02-08=2001-039=2001-W06-4",+ "51949=2001-02-09=2001-040=2001-W06-5",+ "51950=2001-02-10=2001-041=2001-W06-6",+ "51951=2001-02-11=2001-042=2001-W06-7",+ "51952=2001-02-12=2001-043=2001-W07-1",+ "51953=2001-02-13=2001-044=2001-W07-2",+ "51954=2001-02-14=2001-045=2001-W07-3",+ "51955=2001-02-15=2001-046=2001-W07-4",+ "51956=2001-02-16=2001-047=2001-W07-5",+ "51957=2001-02-17=2001-048=2001-W07-6",+ "51958=2001-02-18=2001-049=2001-W07-7",+ "51959=2001-02-19=2001-050=2001-W08-1",+ "51960=2001-02-20=2001-051=2001-W08-2",+ "51961=2001-02-21=2001-052=2001-W08-3",+ "51962=2001-02-22=2001-053=2001-W08-4",+ "51963=2001-02-23=2001-054=2001-W08-5",+ "51964=2001-02-24=2001-055=2001-W08-6",+ "51965=2001-02-25=2001-056=2001-W08-7",+ "51966=2001-02-26=2001-057=2001-W09-1",+ "51967=2001-02-27=2001-058=2001-W09-2",+ "51968=2001-02-28=2001-059=2001-W09-3",+ "51969=2001-03-01=2001-060=2001-W09-4",+ "51970=2001-03-02=2001-061=2001-W09-5",+ "51971=2001-03-03=2001-062=2001-W09-6",+ "51972=2001-03-04=2001-063=2001-W09-7",+ "51973=2001-03-05=2001-064=2001-W10-1",+ "51974=2001-03-06=2001-065=2001-W10-2",+ "51975=2001-03-07=2001-066=2001-W10-3",+ "51976=2001-03-08=2001-067=2001-W10-4",+ "51977=2001-03-09=2001-068=2001-W10-5",+ "51978=2001-03-10=2001-069=2001-W10-6",+ "51979=2001-03-11=2001-070=2001-W10-7",+ "51980=2001-03-12=2001-071=2001-W11-1",+ "51981=2001-03-13=2001-072=2001-W11-2",+ "51982=2001-03-14=2001-073=2001-W11-3",+ "51983=2001-03-15=2001-074=2001-W11-4",+ "51984=2001-03-16=2001-075=2001-W11-5",+ "51985=2001-03-17=2001-076=2001-W11-6",+ "51986=2001-03-18=2001-077=2001-W11-7",+ "51987=2001-03-19=2001-078=2001-W12-1",+ "51988=2001-03-20=2001-079=2001-W12-2",+ "51989=2001-03-21=2001-080=2001-W12-3",+ "51990=2001-03-22=2001-081=2001-W12-4",+ "51991=2001-03-23=2001-082=2001-W12-5",+ "51992=2001-03-24=2001-083=2001-W12-6",+ "51993=2001-03-25=2001-084=2001-W12-7",+ "51994=2001-03-26=2001-085=2001-W13-1",+ "51995=2001-03-27=2001-086=2001-W13-2",+ "51996=2001-03-28=2001-087=2001-W13-3",+ "51997=2001-03-29=2001-088=2001-W13-4",+ "51998=2001-03-30=2001-089=2001-W13-5",+ "51999=2001-03-31=2001-090=2001-W13-6",+ "52000=2001-04-01=2001-091=2001-W13-7",+ "52001=2001-04-02=2001-092=2001-W14-1",+ "52002=2001-04-03=2001-093=2001-W14-2",+ "52003=2001-04-04=2001-094=2001-W14-3",+ "52004=2001-04-05=2001-095=2001-W14-4",+ "52005=2001-04-06=2001-096=2001-W14-5",+ "52006=2001-04-07=2001-097=2001-W14-6",+ "52007=2001-04-08=2001-098=2001-W14-7",+ "52008=2001-04-09=2001-099=2001-W15-1",+ "52009=2001-04-10=2001-100=2001-W15-2",+ "52010=2001-04-11=2001-101=2001-W15-3",+ "52011=2001-04-12=2001-102=2001-W15-4",+ "52012=2001-04-13=2001-103=2001-W15-5",+ "52013=2001-04-14=2001-104=2001-W15-6",+ "52014=2001-04-15=2001-105=2001-W15-7",+ "52015=2001-04-16=2001-106=2001-W16-1",+ "52016=2001-04-17=2001-107=2001-W16-2",+ "52017=2001-04-18=2001-108=2001-W16-3",+ "52018=2001-04-19=2001-109=2001-W16-4",+ "52019=2001-04-20=2001-110=2001-W16-5",+ "52020=2001-04-21=2001-111=2001-W16-6",+ "52021=2001-04-22=2001-112=2001-W16-7",+ "52022=2001-04-23=2001-113=2001-W17-1",+ "52023=2001-04-24=2001-114=2001-W17-2",+ "52024=2001-04-25=2001-115=2001-W17-3",+ "52025=2001-04-26=2001-116=2001-W17-4",+ "52026=2001-04-27=2001-117=2001-W17-5",+ "52027=2001-04-28=2001-118=2001-W17-6",+ "52028=2001-04-29=2001-119=2001-W17-7",+ "52029=2001-04-30=2001-120=2001-W18-1",+ "52030=2001-05-01=2001-121=2001-W18-2",+ "52031=2001-05-02=2001-122=2001-W18-3",+ "52032=2001-05-03=2001-123=2001-W18-4",+ "52033=2001-05-04=2001-124=2001-W18-5",+ "52034=2001-05-05=2001-125=2001-W18-6",+ "52035=2001-05-06=2001-126=2001-W18-7",+ "52036=2001-05-07=2001-127=2001-W19-1",+ "52037=2001-05-08=2001-128=2001-W19-2",+ "52038=2001-05-09=2001-129=2001-W19-3",+ "52039=2001-05-10=2001-130=2001-W19-4",+ "52040=2001-05-11=2001-131=2001-W19-5",+ "52041=2001-05-12=2001-132=2001-W19-6",+ "52042=2001-05-13=2001-133=2001-W19-7",+ "52043=2001-05-14=2001-134=2001-W20-1",+ "52044=2001-05-15=2001-135=2001-W20-2",+ "52045=2001-05-16=2001-136=2001-W20-3",+ "52046=2001-05-17=2001-137=2001-W20-4",+ "52047=2001-05-18=2001-138=2001-W20-5",+ "52048=2001-05-19=2001-139=2001-W20-6",+ "52049=2001-05-20=2001-140=2001-W20-7",+ "52050=2001-05-21=2001-141=2001-W21-1",+ "52051=2001-05-22=2001-142=2001-W21-2",+ "52052=2001-05-23=2001-143=2001-W21-3",+ "52053=2001-05-24=2001-144=2001-W21-4",+ "52054=2001-05-25=2001-145=2001-W21-5",+ "52055=2001-05-26=2001-146=2001-W21-6",+ "52056=2001-05-27=2001-147=2001-W21-7",+ "52057=2001-05-28=2001-148=2001-W22-1",+ "52058=2001-05-29=2001-149=2001-W22-2",+ "52059=2001-05-30=2001-150=2001-W22-3",+ "52060=2001-05-31=2001-151=2001-W22-4",+ "52061=2001-06-01=2001-152=2001-W22-5",+ "52062=2001-06-02=2001-153=2001-W22-6",+ "52063=2001-06-03=2001-154=2001-W22-7",+ "52064=2001-06-04=2001-155=2001-W23-1",+ "52065=2001-06-05=2001-156=2001-W23-2",+ "52066=2001-06-06=2001-157=2001-W23-3",+ "52067=2001-06-07=2001-158=2001-W23-4",+ "52068=2001-06-08=2001-159=2001-W23-5",+ "52069=2001-06-09=2001-160=2001-W23-6",+ "52070=2001-06-10=2001-161=2001-W23-7",+ "52071=2001-06-11=2001-162=2001-W24-1",+ "52072=2001-06-12=2001-163=2001-W24-2",+ "52073=2001-06-13=2001-164=2001-W24-3",+ "52074=2001-06-14=2001-165=2001-W24-4",+ "52075=2001-06-15=2001-166=2001-W24-5",+ "52076=2001-06-16=2001-167=2001-W24-6",+ "52077=2001-06-17=2001-168=2001-W24-7",+ "52078=2001-06-18=2001-169=2001-W25-1",+ "52079=2001-06-19=2001-170=2001-W25-2",+ "52080=2001-06-20=2001-171=2001-W25-3",+ "52081=2001-06-21=2001-172=2001-W25-4",+ "52082=2001-06-22=2001-173=2001-W25-5",+ "52083=2001-06-23=2001-174=2001-W25-6",+ "52084=2001-06-24=2001-175=2001-W25-7",+ "52085=2001-06-25=2001-176=2001-W26-1",+ "52086=2001-06-26=2001-177=2001-W26-2",+ "52087=2001-06-27=2001-178=2001-W26-3",+ "52088=2001-06-28=2001-179=2001-W26-4",+ "52089=2001-06-29=2001-180=2001-W26-5",+ "52090=2001-06-30=2001-181=2001-W26-6",+ "52091=2001-07-01=2001-182=2001-W26-7",+ "52092=2001-07-02=2001-183=2001-W27-1",+ "52093=2001-07-03=2001-184=2001-W27-2",+ "52094=2001-07-04=2001-185=2001-W27-3",+ "52095=2001-07-05=2001-186=2001-W27-4",+ "52096=2001-07-06=2001-187=2001-W27-5",+ "52097=2001-07-07=2001-188=2001-W27-6",+ "52098=2001-07-08=2001-189=2001-W27-7",+ "52099=2001-07-09=2001-190=2001-W28-1",+ "52100=2001-07-10=2001-191=2001-W28-2",+ "52101=2001-07-11=2001-192=2001-W28-3",+ "52102=2001-07-12=2001-193=2001-W28-4",+ "52103=2001-07-13=2001-194=2001-W28-5",+ "52104=2001-07-14=2001-195=2001-W28-6",+ "52105=2001-07-15=2001-196=2001-W28-7",+ "52106=2001-07-16=2001-197=2001-W29-1",+ "52107=2001-07-17=2001-198=2001-W29-2",+ "52108=2001-07-18=2001-199=2001-W29-3",+ "52109=2001-07-19=2001-200=2001-W29-4",+ "52110=2001-07-20=2001-201=2001-W29-5",+ "52111=2001-07-21=2001-202=2001-W29-6",+ "52112=2001-07-22=2001-203=2001-W29-7",+ "52113=2001-07-23=2001-204=2001-W30-1",+ "52114=2001-07-24=2001-205=2001-W30-2",+ "52115=2001-07-25=2001-206=2001-W30-3",+ "52116=2001-07-26=2001-207=2001-W30-4",+ "52117=2001-07-27=2001-208=2001-W30-5",+ "52118=2001-07-28=2001-209=2001-W30-6",+ "52119=2001-07-29=2001-210=2001-W30-7",+ "52120=2001-07-30=2001-211=2001-W31-1",+ "52121=2001-07-31=2001-212=2001-W31-2",+ "52122=2001-08-01=2001-213=2001-W31-3",+ "52123=2001-08-02=2001-214=2001-W31-4",+ "52124=2001-08-03=2001-215=2001-W31-5",+ "52125=2001-08-04=2001-216=2001-W31-6",+ "52126=2001-08-05=2001-217=2001-W31-7",+ "52127=2001-08-06=2001-218=2001-W32-1",+ "52128=2001-08-07=2001-219=2001-W32-2",+ "52129=2001-08-08=2001-220=2001-W32-3",+ "52130=2001-08-09=2001-221=2001-W32-4",+ "52131=2001-08-10=2001-222=2001-W32-5",+ "52132=2001-08-11=2001-223=2001-W32-6",+ "52133=2001-08-12=2001-224=2001-W32-7",+ "52134=2001-08-13=2001-225=2001-W33-1",+ "52135=2001-08-14=2001-226=2001-W33-2",+ "52136=2001-08-15=2001-227=2001-W33-3",+ "52137=2001-08-16=2001-228=2001-W33-4",+ "52138=2001-08-17=2001-229=2001-W33-5",+ "52139=2001-08-18=2001-230=2001-W33-6",+ "52140=2001-08-19=2001-231=2001-W33-7",+ "52141=2001-08-20=2001-232=2001-W34-1",+ "52142=2001-08-21=2001-233=2001-W34-2",+ "52143=2001-08-22=2001-234=2001-W34-3",+ "52144=2001-08-23=2001-235=2001-W34-4",+ "52145=2001-08-24=2001-236=2001-W34-5",+ "52146=2001-08-25=2001-237=2001-W34-6",+ "52147=2001-08-26=2001-238=2001-W34-7",+ "52148=2001-08-27=2001-239=2001-W35-1",+ "52149=2001-08-28=2001-240=2001-W35-2",+ "52150=2001-08-29=2001-241=2001-W35-3",+ "52151=2001-08-30=2001-242=2001-W35-4",+ "52152=2001-08-31=2001-243=2001-W35-5",+ "52153=2001-09-01=2001-244=2001-W35-6",+ "52154=2001-09-02=2001-245=2001-W35-7",+ "52155=2001-09-03=2001-246=2001-W36-1",+ "52156=2001-09-04=2001-247=2001-W36-2",+ "52157=2001-09-05=2001-248=2001-W36-3",+ "52158=2001-09-06=2001-249=2001-W36-4",+ "52159=2001-09-07=2001-250=2001-W36-5",+ "52160=2001-09-08=2001-251=2001-W36-6",+ "52161=2001-09-09=2001-252=2001-W36-7",+ "52162=2001-09-10=2001-253=2001-W37-1",+ "52163=2001-09-11=2001-254=2001-W37-2",+ "52164=2001-09-12=2001-255=2001-W37-3",+ "52165=2001-09-13=2001-256=2001-W37-4",+ "52166=2001-09-14=2001-257=2001-W37-5",+ "52167=2001-09-15=2001-258=2001-W37-6",+ "52168=2001-09-16=2001-259=2001-W37-7",+ "52169=2001-09-17=2001-260=2001-W38-1",+ "52170=2001-09-18=2001-261=2001-W38-2",+ "52171=2001-09-19=2001-262=2001-W38-3",+ "52172=2001-09-20=2001-263=2001-W38-4",+ "52173=2001-09-21=2001-264=2001-W38-5",+ "52174=2001-09-22=2001-265=2001-W38-6",+ "52175=2001-09-23=2001-266=2001-W38-7",+ "52176=2001-09-24=2001-267=2001-W39-1",+ "52177=2001-09-25=2001-268=2001-W39-2",+ "52178=2001-09-26=2001-269=2001-W39-3",+ "52179=2001-09-27=2001-270=2001-W39-4",+ "52180=2001-09-28=2001-271=2001-W39-5",+ "52181=2001-09-29=2001-272=2001-W39-6",+ "52182=2001-09-30=2001-273=2001-W39-7",+ "52183=2001-10-01=2001-274=2001-W40-1",+ "52184=2001-10-02=2001-275=2001-W40-2",+ "52185=2001-10-03=2001-276=2001-W40-3",+ "52186=2001-10-04=2001-277=2001-W40-4",+ "52187=2001-10-05=2001-278=2001-W40-5",+ "52188=2001-10-06=2001-279=2001-W40-6",+ "52189=2001-10-07=2001-280=2001-W40-7",+ "52190=2001-10-08=2001-281=2001-W41-1",+ "52191=2001-10-09=2001-282=2001-W41-2",+ "52192=2001-10-10=2001-283=2001-W41-3",+ "52193=2001-10-11=2001-284=2001-W41-4",+ "52194=2001-10-12=2001-285=2001-W41-5",+ "52195=2001-10-13=2001-286=2001-W41-6",+ "52196=2001-10-14=2001-287=2001-W41-7",+ "52197=2001-10-15=2001-288=2001-W42-1",+ "52198=2001-10-16=2001-289=2001-W42-2",+ "52199=2001-10-17=2001-290=2001-W42-3",+ "52200=2001-10-18=2001-291=2001-W42-4",+ "52201=2001-10-19=2001-292=2001-W42-5",+ "52202=2001-10-20=2001-293=2001-W42-6",+ "52203=2001-10-21=2001-294=2001-W42-7",+ "52204=2001-10-22=2001-295=2001-W43-1",+ "52205=2001-10-23=2001-296=2001-W43-2",+ "52206=2001-10-24=2001-297=2001-W43-3",+ "52207=2001-10-25=2001-298=2001-W43-4",+ "52208=2001-10-26=2001-299=2001-W43-5",+ "52209=2001-10-27=2001-300=2001-W43-6",+ "52210=2001-10-28=2001-301=2001-W43-7",+ "52211=2001-10-29=2001-302=2001-W44-1",+ "52212=2001-10-30=2001-303=2001-W44-2",+ "52213=2001-10-31=2001-304=2001-W44-3",+ "52214=2001-11-01=2001-305=2001-W44-4",+ "52215=2001-11-02=2001-306=2001-W44-5",+ "52216=2001-11-03=2001-307=2001-W44-6",+ "52217=2001-11-04=2001-308=2001-W44-7",+ "52218=2001-11-05=2001-309=2001-W45-1",+ "52219=2001-11-06=2001-310=2001-W45-2",+ "52220=2001-11-07=2001-311=2001-W45-3",+ "52221=2001-11-08=2001-312=2001-W45-4",+ "52222=2001-11-09=2001-313=2001-W45-5",+ "52223=2001-11-10=2001-314=2001-W45-6",+ "52224=2001-11-11=2001-315=2001-W45-7",+ "52225=2001-11-12=2001-316=2001-W46-1",+ "52226=2001-11-13=2001-317=2001-W46-2",+ "52227=2001-11-14=2001-318=2001-W46-3",+ "52228=2001-11-15=2001-319=2001-W46-4",+ "52229=2001-11-16=2001-320=2001-W46-5",+ "52230=2001-11-17=2001-321=2001-W46-6",+ "52231=2001-11-18=2001-322=2001-W46-7",+ "52232=2001-11-19=2001-323=2001-W47-1",+ "52233=2001-11-20=2001-324=2001-W47-2",+ "52234=2001-11-21=2001-325=2001-W47-3",+ "52235=2001-11-22=2001-326=2001-W47-4",+ "52236=2001-11-23=2001-327=2001-W47-5",+ "52237=2001-11-24=2001-328=2001-W47-6",+ "52238=2001-11-25=2001-329=2001-W47-7",+ "52239=2001-11-26=2001-330=2001-W48-1",+ "52240=2001-11-27=2001-331=2001-W48-2",+ "52241=2001-11-28=2001-332=2001-W48-3",+ "52242=2001-11-29=2001-333=2001-W48-4",+ "52243=2001-11-30=2001-334=2001-W48-5",+ "52244=2001-12-01=2001-335=2001-W48-6",+ "52245=2001-12-02=2001-336=2001-W48-7",+ "52246=2001-12-03=2001-337=2001-W49-1",+ "52247=2001-12-04=2001-338=2001-W49-2",+ "52248=2001-12-05=2001-339=2001-W49-3",+ "52249=2001-12-06=2001-340=2001-W49-4",+ "52250=2001-12-07=2001-341=2001-W49-5",+ "52251=2001-12-08=2001-342=2001-W49-6",+ "52252=2001-12-09=2001-343=2001-W49-7",+ "52253=2001-12-10=2001-344=2001-W50-1",+ "52254=2001-12-11=2001-345=2001-W50-2",+ "52255=2001-12-12=2001-346=2001-W50-3",+ "52256=2001-12-13=2001-347=2001-W50-4",+ "52257=2001-12-14=2001-348=2001-W50-5",+ "52258=2001-12-15=2001-349=2001-W50-6",+ "52259=2001-12-16=2001-350=2001-W50-7",+ "52260=2001-12-17=2001-351=2001-W51-1",+ "52261=2001-12-18=2001-352=2001-W51-2",+ "52262=2001-12-19=2001-353=2001-W51-3",+ "52263=2001-12-20=2001-354=2001-W51-4",+ "52264=2001-12-21=2001-355=2001-W51-5",+ "52265=2001-12-22=2001-356=2001-W51-6",+ "52266=2001-12-23=2001-357=2001-W51-7",+ "52267=2001-12-24=2001-358=2001-W52-1",+ "52268=2001-12-25=2001-359=2001-W52-2",+ "52269=2001-12-26=2001-360=2001-W52-3",+ "52270=2001-12-27=2001-361=2001-W52-4",+ "52271=2001-12-28=2001-362=2001-W52-5",+ "52272=2001-12-29=2001-363=2001-W52-6",+ "52273=2001-12-30=2001-364=2001-W52-7",+ "52274=2001-12-31=2001-365=2002-W01-1",+ "52275=2002-01-01=2002-001=2002-W01-2",+ "52276=2002-01-02=2002-002=2002-W01-3",+ "52277=2002-01-03=2002-003=2002-W01-4",+ "52278=2002-01-04=2002-004=2002-W01-5",+ "52279=2002-01-05=2002-005=2002-W01-6",+ "52280=2002-01-06=2002-006=2002-W01-7",+ "",+ "51178=1998-12-31=1998-365=1998-W53-4",+ "",+ "1998-12-31 23:59:60.5",+ "51178,86400.5s",+ "1998-12-31 15:59:60.5",+ "51178,86400.5s",+ "",+ "2000-03-01 00:00:00",+ "2000-03-01 12:00:00",+ "2000-02-29 16:00:00",+ "2000-03-01 04:00:00",+ "2000-03-01 08:00:00",+ "2000-03-01 20:00:00",+ "",+ "12:34:56.789",+ "12:34:56.789123",+ "12:34:56.789123456",+ "12:34:56.789123456789",+ if is64Bit+ then "-9223372036854775808:00:00"+ else "-2147483648:00:00",+ ""+ ]
test/main/Test/TestUtil.hs view
@@ -7,30 +7,33 @@ assertFailure' :: String -> IO a assertFailure' s = do- _ <- assertFailure s -- returns () in some versions- return undefined+ _ <- assertFailure s -- returns () in some versions+ return undefined assertJust :: Maybe a -> IO a assertJust (Just a) = return a assertJust Nothing = assertFailure' "Nothing" class NameTest a where- nameTest :: String -> a -> TestTree+ nameTest :: String -> a -> TestTree instance NameTest [TestTree] where- nameTest = testGroup+ nameTest = testGroup instance NameTest Assertion where- nameTest = Test.Tasty.HUnit.testCase+ nameTest = Test.Tasty.HUnit.testCase instance NameTest Property where- nameTest = testProperty+ nameTest = testProperty instance NameTest Result where- nameTest name = nameTest name . property+ nameTest name = nameTest name . property instance (Arbitrary a, Show a, Testable b) => NameTest (a -> b) where- nameTest name = nameTest name . property+ nameTest name = nameTest name . property++instance (Testable a) => NameTest (Gen a) where+ nameTest name = nameTest name . property tgroup :: (Show a, NameTest t) => [a] -> (a -> t) -> [TestTree] tgroup aa f = fmap (\a -> nameTest (show a) $ f a) aa
test/main/Test/Types.hs view
@@ -3,11 +3,11 @@ import Control.DeepSeq import Data.Data import Data.Ix-import Data.Time.Compat import Data.Time.Calendar.Month.Compat import Data.Time.Calendar.Quarter.Compat import Data.Time.Clock.System.Compat import Data.Time.Clock.TAI.Compat+import Data.Time.Compat class (Typeable t, Data t, NFData t) => CheckDataInstances t
+ test/template/Main.hs view
@@ -0,0 +1,31 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE TemplateHaskell #-}++module Main (main) where++import Data.Time.Clock.Compat+import qualified Language.Haskell.TH.Syntax as TH+import Test.Tasty+import Test.Tasty.HUnit++testLift :: TestTree+testLift =+ testGroup+ "Lift instances"+#if MIN_VERSION_template_haskell(2,16,0)+ [ testCase "DiffTime" $ $$(TH.liftTyped (secondsToDiffTime 100)) @?= secondsToDiffTime 100,+ testCase "NominalDiffTime" $ $$(TH.liftTyped (secondsToNominalDiffTime 100)) @?= secondsToNominalDiffTime 100+ ]+#else+ []+#endif++tests :: TestTree+tests =+ testGroup+ "time-template"+ [ testLift+ ]++main :: IO ()+main = defaultMain tests
time-compat.cabal view
@@ -1,6 +1,6 @@ cabal-version: 1.12 name: time-compat-version: 1.9.8+version: 1.9.9 synopsis: Compatibility package for time description: This packages tries to compat as much of @time@ features as possible.@@ -29,10 +29,11 @@ || ==9.0.2 || ==9.2.8 || ==9.4.8- || ==9.6.6+ || ==9.6.7 || ==9.8.4- || ==9.10.1- || ==9.12.1+ || ==9.10.2+ || ==9.12.2+ || ==9.14.1 source-repository head type: git@@ -44,7 +45,7 @@ other-extensions: CPP default-extensions: Trustworthy build-depends:- base >=4.12 && <4.22+ base >=4.12 && <4.23 , base-orphans >=0.9.2 && <0.10 , deepseq >=1.4.4.0 && <1.6 , hashable >=1.4.4.0 && <1.6@@ -80,6 +81,7 @@ other-modules: Data.Format+ Data.Time.Calendar.DayPeriod Data.Time.Calendar.Private Data.Time.Calendar.Types Data.Time.Orphans@@ -105,7 +107,7 @@ -- * Test.Format.Compile doesn't work -- * disabled 'TimeOfDay minBound 0 0' (Test.LocalTime.Time) ---test-suite main+test-suite test-main if !impl(ghc >=7.4) buildable: False @@ -114,12 +116,14 @@ hs-source-dirs: test/main default-extensions: CPP+ DefaultSignatures DeriveDataTypeable DerivingStrategies ExistentialQuantification FlexibleInstances GeneralizedNewtypeDeriving MultiParamTypeClasses+ NumericUnderscores Rank2Types RecordWildCards ScopedTypeVariables@@ -132,13 +136,11 @@ build-depends: base , deepseq- , QuickCheck >=2.15.0.1 && <2.16- , random >=1.2.1.3 && <1.3- , tagged >=0.8.9 && <0.9+ , QuickCheck >=2.15.0.1 && <2.17+ , random >=1.2.1.3 && <1.4 , tasty >=1.5 && <1.6 , tasty-hunit >=0.10 && <0.11 , tasty-quickcheck >=0.11 && <0.12- , template-haskell , time-compat if !impl(ghc >=8.0)@@ -146,7 +148,6 @@ fail >=4.9.0.0 && <4.10 , semigroups >=0.18.5 && <0.21 - build-depends: time main-is: Main.hs other-modules: Test.Arbitrary@@ -171,7 +172,7 @@ Test.Calendar.Week Test.Calendar.Year Test.Clock.Conversion- Test.Clock.Lift+ Test.Clock.Pattern Test.Clock.Resolution Test.Clock.TAI Test.Format.Compile@@ -184,3 +185,15 @@ Test.LocalTime.TimeRef Test.TestUtil Test.Types++test-suite test-template+ type: exitcode-stdio-1.0+ default-language: Haskell2010+ hs-source-dirs: test/template+ main-is: Main.hs+ build-depends:+ base+ , tasty+ , tasty-hunit+ , template-haskell+ , time-compat