diff --git a/Data/Time/Calendar/Days.hs b/Data/Time/Calendar/Days.hs
--- a/Data/Time/Calendar/Days.hs
+++ b/Data/Time/Calendar/Days.hs
@@ -27,7 +27,7 @@
 	rnf (ModifiedJulianDay a) = rnf a
 
 instance Typeable Day where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Calendar.Days.Day") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Calendar.Days" "Day") []
 
 -- necessary because H98 doesn't have "cunning newtype" derivation
 instance Enum Day where
diff --git a/Data/Time/Calendar/Private.hs b/Data/Time/Calendar/Private.hs
--- a/Data/Time/Calendar/Private.hs
+++ b/Data/Time/Calendar/Private.hs
@@ -9,33 +9,29 @@
 pad1 (Just c) s = c:s
 pad1 _ s = s
 
+padN :: Int -> Char -> String -> String
+padN i _ s | i <= 0 = s
+padN i c s = (replicate i c) ++ s
+
 show2Fixed :: NumericPadOption -> Pico -> String
 show2Fixed opt x | x < 10 = pad1 opt (showFixed True x)
 show2Fixed _ x = showFixed True x
 
+showPaddedMin :: (Num t,Ord t,Show t) => Int -> NumericPadOption -> t -> String
+showPaddedMin _ Nothing i = show i
+showPaddedMin pl opt i | i < 0 = '-':(showPaddedMin pl opt (negate i))
+showPaddedMin pl (Just c) i =
+  let s = show i in 
+    padN (pl - (length s)) c s
+
 show2 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
-show2 opt i | i < 0 = '-':(show2 opt (negate i))
-show2 opt i = let
-	s = show i in
-  case s of
-	[_] -> pad1 opt s
-	_ -> s
+show2 = showPaddedMin 2
 
 show3 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
-show3 opt i | i < 0 = '-':(show3 opt (negate i))
-show3 opt i = let
-	s = show2 opt i in
-  case s of
-	[_,_] -> pad1 opt s
-	_ -> s
+show3 = showPaddedMin 3
 
 show4 :: (Num t,Ord t,Show t) => NumericPadOption -> t -> String
-show4 opt i | i < 0 = '-':(show4 opt (negate i))
-show4 opt i = let
-	s = show3 opt i in
-  case s of
-	[_,_,_] -> pad1 opt s
-	_ -> s
+show4 = showPaddedMin 4
 
 mod100 :: (Integral i) => i -> i
 mod100 x = mod x 100
diff --git a/Data/Time/Clock/Scale.hs b/Data/Time/Clock/Scale.hs
--- a/Data/Time/Clock/Scale.hs
+++ b/Data/Time/Clock/Scale.hs
@@ -35,7 +35,7 @@
 	rnf (ModJulianDate a) = rnf a
 
 instance Typeable UniversalTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.Scale.UniversalTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.Scale" "UniversalTime") []
 
 -- | This is a length of time, as measured by a clock.
 -- Conversion functions will treat it as seconds.
@@ -55,7 +55,7 @@
 instance NFData DiffTime -- FIXME: Data.Fixed had no NFData instances yet at time of writing
 
 instance Typeable DiffTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.Scale.DiffTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.Scale" "DiffTime") []
 
 -- necessary because H98 doesn't have "cunning newtype" derivation
 instance Enum DiffTime where
diff --git a/Data/Time/Clock/TAI.hs b/Data/Time/Clock/TAI.hs
--- a/Data/Time/Clock/TAI.hs
+++ b/Data/Time/Clock/TAI.hs
@@ -40,7 +40,7 @@
 	rnf (MkAbsoluteTime a) = rnf a
 
 instance Typeable AbsoluteTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.TAI.AbsoluteTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.TAI" "AbsoluteTime") []
 
 instance Show AbsoluteTime where
 	show t = show (utcToLocalTime utc (taiToUTCTime (const 0) t)) ++ " TAI" -- ugly, but standard apparently
diff --git a/Data/Time/Clock/UTC.hs b/Data/Time/Clock/UTC.hs
--- a/Data/Time/Clock/UTC.hs
+++ b/Data/Time/Clock/UTC.hs
@@ -45,7 +45,7 @@
 	rnf (UTCTime d t) = d `deepseq` t `deepseq` ()
 
 instance Typeable UTCTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.UTC.UTCTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.UTC" "UTCTime") []
 
 instance Eq UTCTime where
 	(UTCTime da ta) == (UTCTime db tb) = (da == db) && (ta == tb)
@@ -75,7 +75,7 @@
 instance NFData NominalDiffTime -- FIXME: Data.Fixed had no NFData instances yet at time of writing
 
 instance Typeable NominalDiffTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.Clock.UTC.NominalDiffTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.Clock.UTC" "NominalDiffTime") []
 
 instance Enum NominalDiffTime where
 	succ (MkNominalDiffTime a) = MkNominalDiffTime (succ a)
diff --git a/Data/Time/Format.hs b/Data/Time/Format.hs
--- a/Data/Time/Format.hs
+++ b/Data/Time/Format.hs
@@ -73,25 +73,25 @@
 --
 -- [@%r@] as 'time12Fmt' @locale@ (e.g. @%I:%M:%S %p@)
 --
--- [@%P@] day half from ('amPm' @locale@), converted to lowercase, @am@, @pm@
+-- [@%P@] day-half of day from ('amPm' @locale@), converted to lowercase, @am@, @pm@
 --
--- [@%p@] day half from ('amPm' @locale@), @AM@, @PM@
+-- [@%p@] day-half of day from ('amPm' @locale@), @AM@, @PM@
 --
--- [@%H@] hour, 24-hour, leading 0 as needed, @00@ - @23@
+-- [@%H@] hour of day (24-hour), 0-padded to two chars, @00@ - @23@
 --
--- [@%I@] hour, 12-hour, leading 0 as needed, @01@ - @12@
+-- [@%k@] hour of day (24-hour), space-padded to two chars, @ 0@ - @23@
 --
--- [@%k@] hour, 24-hour, leading space as needed, @ 0@ - @23@
+-- [@%I@] hour of day-half (12-hour), 0-padded to two chars, @01@ - @12@
 --
--- [@%l@] hour, 12-hour, leading space as needed, @ 1@ - @12@
+-- [@%l@] hour of day-half (12-hour), space-padded to two chars, @ 1@ - @12@
 --
--- [@%M@] minute, @00@ - @59@
+-- [@%M@] minute of hour, 0-padded to two chars, @00@ - @59@
 --
--- [@%S@] second, without decimal part, @00@ - @60@
+-- [@%S@] second of minute (without decimal part), 0-padded to two chars, @00@ - @60@
 --
--- [@%q@] picosecond, including trailing zeros, @000000000000@ - @999999999999@.
+-- [@%q@] picosecond of second, 0-padded to twelve chars, @000000000000@ - @999999999999@.
 --
--- [@%Q@] decimal point and up to 12 second decimals, without trailing zeros.
+-- [@%Q@] decimal point and fraction of second, up to 12 second decimals, without trailing zeros.
 -- For a whole number of seconds, @%Q@ produces the empty string.
 --
 -- For 'UTCTime' and 'ZonedTime':
@@ -109,43 +109,43 @@
 --
 -- [@%x@] as 'dateFmt' @locale@ (e.g. @%m\/%d\/%y@)
 --
--- [@%Y@] year
+-- [@%Y@] year, no padding. Note @%0y@ and @%_y@ pad to four chars
 --
--- [@%y@] last two digits of year, @00@ - @99@
+-- [@%y@] year of century, 0-padded to two chars, @00@ - @99@
 --
--- [@%C@] century (being the first two digits of the year), @00@ - @99@
+-- [@%C@] century, no padding. Note @%0C@ and @%_C@ pad to two chars
 --
 -- [@%B@] month name, long form ('fst' from 'months' @locale@), @January@ - @December@
 --
 -- [@%b@, @%h@] month name, short form ('snd' from 'months' @locale@), @Jan@ - @Dec@
 --
--- [@%m@] month of year, leading 0 as needed, @01@ - @12@
+-- [@%m@] month of year, 0-padded to two chars, @01@ - @12@
 --
--- [@%d@] day of month, leading 0 as needed, @01@ - @31@
+-- [@%d@] day of month, 0-padded to two chars, @01@ - @31@
 --
--- [@%e@] day of month, leading space as needed,  @ 1@ - @31@
+-- [@%e@] day of month, space-padded to two chars,  @ 1@ - @31@
 --
--- [@%j@] day of year for Ordinal Date format, @001@ - @366@
+-- [@%j@] day of year, 0-padded to three chars, @001@ - @366@
 --
--- [@%G@] year for Week Date format
+-- [@%G@] year for Week Date format, no padding. Note @%0G@ and @%_G@ pad to four chars
 --
--- [@%g@] last two digits of year for Week Date format, @00@ - @99@
+-- [@%g@] year of century for Week Date format, 0-padded to two chars, @00@ - @99@
 --
--- [@%f@] century (first two digits of year) for Week Date format, @00@ - @99@
+-- [@%f@] century for Week Date format, no padding. Note @%0f@ and @%_f@ pad to two chars
 --
--- [@%V@] week for Week Date format, @01@ - @53@
+-- [@%V@] week of year for Week Date format, 0-padded to two chars, @01@ - @53@
 --
--- [@%u@] day for Week Date format, @1@ - @7@
+-- [@%u@] day of week for Week Date format, @1@ - @7@
 --
 -- [@%a@] day of week, short form ('snd' from 'wDays' @locale@), @Sun@ - @Sat@
 --
 -- [@%A@] day of week, long form ('fst' from 'wDays' @locale@), @Sunday@ - @Saturday@
 --
--- [@%U@] week number of year, where weeks start on Sunday (as 'sundayStartWeek'), @00@ - @53@
+-- [@%U@] week of year where weeks start on Sunday (as 'sundayStartWeek'), 0-padded to two chars, @00@ - @53@
 --
 -- [@%w@] day of week number, @0@ (= Sunday) - @6@ (= Saturday)
 --
--- [@%W@] week number of year, where weeks start on Monday (as 'mondayStartWeek'), @00@ - @53@
+-- [@%W@] week of year where weeks start on Monday (as 'mondayStartWeek'), 0-padded to two chars, @00@ - @53@
 formatTime :: (FormatTime t) => TimeLocale -> String -> t -> String
 formatTime _ [] _ = ""
 formatTime locale ('%':'_':c:cs) t = (formatChar c locale (Just (Just ' ')) t) ++ (formatTime locale cs t)
@@ -211,9 +211,9 @@
 	formatCharacter 'x' = Just (\locale _ -> formatTime locale (dateFmt locale))
 
 	-- Year Count
-	formatCharacter 'Y' = Just (\_ _ -> show . fst . toOrdinalDate)
+	formatCharacter 'Y' = Just (\_ opt -> (show4 (fromMaybe Nothing opt)) . fst . toOrdinalDate)
 	formatCharacter 'y' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . mod100 . fst . toOrdinalDate)
-	formatCharacter 'C' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . div100 . fst . toOrdinalDate)
+	formatCharacter 'C' = Just (\_ opt -> (show2 (fromMaybe Nothing opt)) . div100 . fst . toOrdinalDate)
 	-- Month of Year
 	formatCharacter 'B' = Just (\locale _ -> fst . (\(_,m,_) -> (months locale) !! (m - 1)) . toGregorian)
 	formatCharacter 'b' = Just (\locale _ -> snd . (\(_,m,_) -> (months locale) !! (m - 1)) . toGregorian)
@@ -226,9 +226,9 @@
 	formatCharacter 'j' = Just (\_ opt -> (show3 (fromMaybe (Just '0') opt)) . snd . toOrdinalDate)
 
 	-- ISO 8601 Week Date
-	formatCharacter 'G' = Just (\_ _ -> show . (\(y,_,_) -> y) . toWeekDate)
+	formatCharacter 'G' = Just (\_ opt -> (show4 (fromMaybe Nothing opt)) . (\(y,_,_) -> y) . toWeekDate)
 	formatCharacter 'g' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . mod100 . (\(y,_,_) -> y) . toWeekDate)
-	formatCharacter 'f' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . div100 . (\(y,_,_) -> y) . toWeekDate)
+	formatCharacter 'f' = Just (\_ opt -> (show2 (fromMaybe Nothing opt)) . div100 . (\(y,_,_) -> y) . toWeekDate)
 
 	formatCharacter 'V' = Just (\_ opt -> (show2 (fromMaybe (Just '0') opt)) . (\(_,w,_) -> w) . toWeekDate)
 	formatCharacter 'u' = Just (\_ _ -> show . (\(_,_,d) -> d) . toWeekDate)
diff --git a/Data/Time/Format/Parse.hs b/Data/Time/Format/Parse.hs
--- a/Data/Time/Format/Parse.hs
+++ b/Data/Time/Format/Parse.hs
@@ -71,15 +71,23 @@
 --
 -- [@%Z@] accepts any string of letters, or any of the formats accepted by @%z@.
 --
+-- [@%0Y@] accepts exactly four digits.
+--
+-- [@%0G@] accepts exactly four digits.
+--
+-- [@%0C@] accepts exactly two digits.
+--
+-- [@%0f@] accepts exactly two digits.
+--
 parseTime :: ParseTime t =>
              TimeLocale -- ^ Time locale.
           -> String     -- ^ Format string.
           -> String     -- ^ Input string.
           -> Maybe t    -- ^ The time value, or 'Nothing' if the input could
                         -- not be parsed using the given format.
-parseTime l fmt s = case readsTime l fmt s of
-                      [(t,r)] | all isSpace r -> Just t
-                      _        -> Nothing
+parseTime l fmt s = case goodReadsTime l fmt s of
+    [t] -> Just t
+    _   -> Nothing
 
 -- | Parse a time value given a format string. Fails if the input could
 -- not be parsed using the given format. See 'parseTime' for details.
@@ -88,11 +96,18 @@
          -> String     -- ^ Format string.
          -> String     -- ^ Input string.
          -> t          -- ^ The time value.
-readTime l fmt s = case readsTime l fmt s of
-                      [(t,r)] | all isSpace r -> t
-                      [(_,x)]  -> error $ "readTime: junk at end of " ++ show x
-                      _        -> error $ "readsTime: bad input " ++ show s
+readTime l fmt s = case goodReadsTime l fmt s of
+    [t] -> t
+    []  -> error $ "readTime: no parse of " ++ show s
+    _   -> error $ "readTime: multiple parses of " ++ show s
 
+goodReadsTime :: ParseTime t =>
+             TimeLocale -- ^ Time locale.
+          -> String     -- ^ Format string
+          -> String     -- ^ Input string.
+          -> [t]
+goodReadsTime l fmt s = [t | (t,r) <- readsTime l fmt s, all isSpace r]
+
 -- | Parse a time value given a format string.  See 'parseTime' for details.
 readsTime :: ParseTime t =>
              TimeLocale -- ^ Time locale.
@@ -137,63 +152,99 @@
         pc mpad c   = [Value mpad c]
 
 parseInput :: TimeLocale -> DateFormat -> ReadP [(Char,String)]
-parseInput l = liftM catMaybes . mapM p
-  where p (Value mpad c)   = parseValue l mpad c >>= return . Just . (,) c
-        p WhiteSpace  = skipSpaces >> return Nothing
-        p (Literal c) = char c >> return Nothing
+parseInput _ [] = return []
+parseInput l (Value mpad c:ff) = do
+  s <- parseValue l mpad c
+  r <- parseInput l ff
+  return ((c,s):r)
+parseInput l (Literal c:ff) = do
+  _ <- char c
+  parseInput l ff
+parseInput l (WhiteSpace:ff) = do
+  _ <- satisfy isSpace
+  case ff of
+     (WhiteSpace:_) -> return ()
+     _ -> skipSpaces
+  parseInput l ff
 
 -- | Get the string corresponding to the given format specifier.
 parseValue :: TimeLocale -> Maybe Padding -> Char -> ReadP String
 parseValue l mpad c = 
     case c of
-      'z' -> numericTZ
-      'Z' -> munch1 isAlpha <++
-             numericTZ <++
-             return "" -- produced by %Z for LocalTime
-      'P' -> oneOf (let (am,pm) = amPm l in [am, pm])
-      'p' -> oneOf (let (am,pm) = amPm l in [am, pm])
-      'H' -> digits ZeroPadding 2
-      'I' -> digits ZeroPadding 2
-      'k' -> digits SpacePadding 2
-      'l' -> digits SpacePadding 2
-      'M' -> digits ZeroPadding 2 
-      'S' -> digits ZeroPadding 2
-      'q' -> digits ZeroPadding 12
-      'Q' -> liftM2 (:) (char '.') (munch isDigit) <++ return ""
-      's' -> (char '-' >> liftM ('-':) (munch1 isDigit)) 
-             <++ munch1 isDigit
-      'Y' -> digits ZeroPadding 4
+      -- century
+      'C' -> digits SpacePadding 2
+      'f' -> digits SpacePadding 2
+
+      -- year
+      'Y' -> digits SpacePadding 4
+      'G' -> digits SpacePadding 4
+      
+      -- year of century
       'y' -> digits ZeroPadding 2
-      'C' -> digits ZeroPadding 2
+      'g' -> digits ZeroPadding 2
+
+      -- month of year
       'B' -> oneOf (map fst (months l))
       'b' -> oneOf (map snd (months l))
       'm' -> digits ZeroPadding 2
+      
+      -- day of month
       'd' -> digits ZeroPadding 2
       'e' -> digits SpacePadding 2
-      'j' -> digits ZeroPadding 3
-      'G' -> digits ZeroPadding 4
-      'g' -> digits ZeroPadding 2
-      'f' -> digits ZeroPadding 2
+      
+      -- week of year
       'V' -> digits ZeroPadding 2
+      'U' -> digits ZeroPadding 2
+      'W' -> digits ZeroPadding 2
+      
+      -- day of week
       'u' -> oneOf $ map (:[]) ['1'..'7']
       'a' -> oneOf (map snd (wDays l))
       'A' -> oneOf (map fst (wDays l))
-      'U' -> digits ZeroPadding 2
       'w' -> oneOf $ map (:[]) ['0'..'6']
-      'W' -> digits ZeroPadding 2
+      
+      -- day of year
+      'j' -> digits ZeroPadding 3
+
+      -- dayhalf of day (i.e. AM or PM)
+      'P' -> oneOf (let (am,pm) = amPm l in [am, pm])
+      'p' -> oneOf (let (am,pm) = amPm l in [am, pm])
+
+      -- hour of day (i.e. 24h)
+      'H' -> digits ZeroPadding 2
+      'k' -> digits SpacePadding 2
+      
+      -- hour of dayhalf (i.e. 12h)
+      'I' -> digits ZeroPadding 2
+      'l' -> digits SpacePadding 2
+      
+      -- minute of hour
+      'M' -> digits ZeroPadding 2
+      
+      -- second of minute
+      'S' -> digits ZeroPadding 2
+      
+      -- picosecond of second
+      'q' -> digits ZeroPadding 12
+      'Q' -> liftM2 (:) (char '.') (munch isDigit) <++ return ""
+
+      -- time zone
+      'z' -> numericTZ
+      'Z' -> munch1 isAlpha <++
+             numericTZ <++
+             return "" -- produced by %Z for LocalTime
+
+      -- seconds since epoch
+      's' -> (char '-' >> liftM ('-':) (munch1 isDigit)) 
+             <++ munch1 isDigit
+
       _   -> fail $ "Unknown format character: " ++ show c
   where
     oneOf = choice . map string
     digitsforce ZeroPadding n = count n (satisfy isDigit)
-    digitsforce SpacePadding n = skipSpaces >> oneUpTo n (satisfy isDigit)
-    digitsforce NoPadding n = oneUpTo n (satisfy isDigit)
+    digitsforce SpacePadding _n = skipSpaces >> many1 (satisfy isDigit)
+    digitsforce NoPadding _n = many1 (satisfy isDigit)
     digits pad = digitsforce (fromMaybe pad mpad)
-    oneUpTo :: Int -> ReadP a -> ReadP [a]
-    oneUpTo 0 _ = pfail
-    oneUpTo n x = liftM2 (:) x (upTo (n-1) x)
-    upTo :: Int -> ReadP a -> ReadP [a]
-    upTo 0 _ = return []
-    upTo n x = (oneUpTo n x) <++ return []
     numericTZ = do s <- choice [char '+', char '-']
                    h <- digitsforce ZeroPadding 2
                    optional (char ':')
@@ -205,13 +256,13 @@
 -- * Instances for the time package types
 --
 
-data DayComponent = Year Integer -- 0-99, last two digits of both real years and week years
-                  | Century Integer -- century of all years
-                  | Month Int -- 1-12
-                  | Day Int -- 1-31
+data DayComponent = Century Integer -- century of all years
+                  | CenturyYear Integer -- 0-99, last two digits of both real years and week years
+                  | YearMonth Int -- 1-12
+                  | MonthDay Int -- 1-31
                   | YearDay Int -- 1-366
                   | WeekDay Int -- 1-7 (mon-sun)
-                  | Week WeekType Int -- 1-53 or 0-53
+                  | YearWeek WeekType Int -- 1-53 or 0-53
 
 data WeekType = ISOWeek | SundayWeek | MondayWeek
 
@@ -220,63 +271,63 @@
      where
       f c x = 
         case c of
+          -- %C: century (all but the last two digits of the year), 00 - 99
+          'C' -> [Century (read x)]
+          -- %f century (all but the last two digits of the year), 00 - 99
+          'f' -> [Century (read x)]
           -- %Y: year
-          'Y' -> let y = read x in [Century (y `div` 100), Year (y `mod` 100)]
+          'Y' -> let y = read x in [Century (y `div` 100), CenturyYear (y `mod` 100)]
+          -- %G: year for Week Date format
+          'G' -> let y = read x in [Century (y `div` 100), CenturyYear (y `mod` 100)]
           -- %y: last two digits of year, 00 - 99
-          'y' -> [Year (read x)]
-          -- %C: century (being the first two digits of the year), 00 - 99
-          'C' -> [Century (read x)]
+          'y' -> [CenturyYear (read x)]
+          -- %g: last two digits of year for Week Date format, 00 - 99
+          'g' -> [CenturyYear (read x)]
           -- %B: month name, long form (fst from months locale), January - December
-          'B' -> [Month (1 + fromJust (elemIndex (up x) (map (up . fst) (months l))))]
+          'B' -> [YearMonth (1 + fromJust (elemIndex (up x) (map (up . fst) (months l))))]
           -- %b: month name, short form (snd from months locale), Jan - Dec
-          'b' -> [Month (1 + fromJust (elemIndex (up x) (map (up . snd) (months l))))]
+          'b' -> [YearMonth (1 + fromJust (elemIndex (up x) (map (up . snd) (months l))))]
           -- %m: month of year, leading 0 as needed, 01 - 12
-          'm' -> [Month (read x)]
+          'm' -> [YearMonth (read x)]
           -- %d: day of month, leading 0 as needed, 01 - 31
-          'd' -> [Day (read x)]
+          'd' -> [MonthDay (read x)]
           -- %e: day of month, leading space as needed, 1 - 31
-          'e' -> [Day (read x)]
-          -- %j: day of year for Ordinal Date format, 001 - 366
-          'j' -> [YearDay (read x)]
-          -- %G: year for Week Date format
-          'G' -> let y = read x in [Century (y `div` 100), Year (y `mod` 100)]
-          -- %g: last two digits of year for Week Date format, 00 - 99
-          'g' -> [Year (read x)]
-          -- %f century (first two digits of year) for Week Date format, 00 - 99
-          'f' -> [Century (read x)]
+          'e' -> [MonthDay (read x)]
           -- %V: week for Week Date format, 01 - 53
-          'V' -> [Week ISOWeek (read x)]
+          'V' -> [YearWeek ISOWeek (read x)]
+          -- %U: week number of year, where weeks start on Sunday (as sundayStartWeek), 01 - 53
+          'U' -> [YearWeek SundayWeek (read x)]
+          -- %W: week number of year, where weeks start on Monday (as mondayStartWeek), 01 - 53
+          'W' -> [YearWeek MondayWeek (read x)]
           -- %u: day for Week Date format, 1 - 7
           'u' -> [WeekDay (read x)]
           -- %a: day of week, short form (snd from wDays locale), Sun - Sat
           'a' -> [WeekDay (1 + (fromJust (elemIndex (up x) (map (up . snd) (wDays l))) + 6) `mod` 7)]
           -- %A: day of week, long form (fst from wDays locale), Sunday - Saturday
           'A' -> [WeekDay (1 + (fromJust (elemIndex (up x) (map (up . fst) (wDays l))) + 6) `mod` 7)]
-          -- %U: week number of year, where weeks start on Sunday (as sundayStartWeek), 01 - 53
-          'U' -> [Week SundayWeek (read x)]
           -- %w: day of week number, 0 (= Sunday) - 6 (= Saturday)
           'w' -> [WeekDay (((read x + 6) `mod` 7) + 1)]
-          -- %W: week number of year, where weeks start on Monday (as mondayStartWeek), 01 - 53
-          'W' -> [Week MondayWeek (read x)]
+          -- %j: day of year for Ordinal Date format, 001 - 366
+          'j' -> [YearDay (read x)]
           _   -> []
 
       buildDay cs = rest cs
         where
         y = let 
-                d = safeLast 70 [x | Year x <- cs]
+                d = safeLast 70 [x | CenturyYear x <- cs]
                 c = safeLast (if d >= 69 then 19 else 20) [x | Century x <- cs]
              in 100 * c + d
 
-        rest (Month m:_)  = let d = safeLast 1 [x | Day x <- cs]
+        rest (YearMonth m:_)  = let d = safeLast 1 [x | MonthDay x <- cs]
                              in fromGregorian y m d
         rest (YearDay d:_) = fromOrdinalDate y d
-        rest (Week wt w:_) = let d = safeLast 4 [x | WeekDay x <- cs]
+        rest (YearWeek wt w:_) = let d = safeLast 4 [x | WeekDay x <- cs]
                               in case wt of
                                    ISOWeek    -> fromWeekDate y w d
                                    SundayWeek -> fromSundayStartWeek y w (d `mod` 7)
                                    MondayWeek -> fromMondayStartWeek y w d
         rest (_:xs)        = rest xs
-        rest []            = rest [Month 1]
+        rest []            = rest [YearMonth 1]
 
       safeLast x xs = last (x:xs)
 
@@ -373,6 +424,7 @@
                     h = read [h1,h2]
                     m = read [m1,m2]
 
+-- Dubious
 _TIMEZONES_ :: [(String, (Int, Bool))]
 _TIMEZONES_ =
     -- New Zealand Daylight-Saving Time
diff --git a/Data/Time/LocalTime/LocalTime.hs b/Data/Time/LocalTime/LocalTime.hs
--- a/Data/Time/LocalTime/LocalTime.hs
+++ b/Data/Time/LocalTime/LocalTime.hs
@@ -44,7 +44,7 @@
 	rnf (LocalTime d t) = d `deepseq` t `deepseq` ()
 
 instance Typeable LocalTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.LocalTime.LocalTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.LocalTime" "LocalTime") []
 
 instance Show LocalTime where
 	show (LocalTime d t) = (showGregorian d) ++ " " ++ (show t)
@@ -87,7 +87,7 @@
 	rnf (ZonedTime lt z) = lt `deepseq` z `deepseq` ()
 
 instance Typeable ZonedTime where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.LocalTime.ZonedTime") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.LocalTime" "ZonedTime") []
 
 utcToZonedTime :: TimeZone -> UTCTime -> ZonedTime
 utcToZonedTime zone time = ZonedTime (utcToLocalTime zone time) zone
diff --git a/Data/Time/LocalTime/TimeOfDay.hs b/Data/Time/LocalTime/TimeOfDay.hs
--- a/Data/Time/LocalTime/TimeOfDay.hs
+++ b/Data/Time/LocalTime/TimeOfDay.hs
@@ -43,7 +43,7 @@
 	rnf (TimeOfDay h m s) = h `deepseq` m `deepseq` s `seq` () -- FIXME: Data.Fixed had no NFData instances yet at time of writing
 
 instance Typeable TimeOfDay where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.TimeOfDay.TimeOfDay") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.TimeOfDay" "TimeOfDay") []
 
 -- | Hour zero
 midnight :: TimeOfDay
diff --git a/Data/Time/LocalTime/TimeZone.hs b/Data/Time/LocalTime/TimeZone.hs
--- a/Data/Time/LocalTime/TimeZone.hs
+++ b/Data/Time/LocalTime/TimeZone.hs
@@ -45,7 +45,7 @@
 	rnf (TimeZone m so n) = m `deepseq` so `deepseq` n `deepseq` ()
 
 instance Typeable TimeZone where
-	typeOf _ = mkTyConApp (mkTyCon "Data.Time.LocalTime.TimeZone.TimeZone") []
+	typeOf _ = mkTyConApp (mkTyCon3 "time" "Data.Time.LocalTime.TimeZone" "TimeZone") []
 
 -- | Create a nameless non-summer timezone for this number of minutes
 minutesToTimeZone :: Int -> TimeZone
diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,26 +1,2 @@
-module Main (main) where
-
-import Control.Exception
-import Distribution.PackageDescription
 import Distribution.Simple
-import Distribution.Simple.LocalBuildInfo
-import Distribution.Simple.Utils
-import System.Cmd
-import System.Directory
-import System.Info
-
-main :: IO ()
-main = case os of
-    "windows" -> defaultMain
-    "mingw32" -> defaultMain
-    _ -> let hooks = autoconfUserHooks { runTests = runTestScript } in defaultMainWithHooks hooks
-
-withCurrentDirectory :: FilePath -> IO a -> IO a
-withCurrentDirectory path f = do
-    cur <- getCurrentDirectory
-    setCurrentDirectory path
-    finally f (setCurrentDirectory cur)
-
-runTestScript :: Args -> Bool -> PackageDescription -> LocalBuildInfo -> IO ()
-runTestScript _args _flag _pd _lbi
- = maybeExit $ withCurrentDirectory "test" $ system "make"
+main = defaultMain
diff --git a/Test.hs b/Test.hs
new file mode 100644
--- /dev/null
+++ b/Test.hs
@@ -0,0 +1,11 @@
+module Main where
+import Test.Framework
+import Test.Tests
+import Foreign.C.Types
+
+main :: IO ()
+main = do
+  if (toRational (1000000000000 :: CTime)) /= (1000000000000 :: Rational)
+    then putStrLn "WARNING: Some tests will incorrectly fail due to a 32-bit time_t C type."
+    else return ()
+  defaultMain tests
diff --git a/Test/AddDays.hs b/Test/AddDays.hs
new file mode 100644
--- /dev/null
+++ b/Test/AddDays.hs
@@ -0,0 +1,41 @@
+module Test.AddDays where
+
+import Data.Time.Calendar
+import Test.TestUtil
+import Test.AddDaysRef
+
+days ::[Day]
+days =
+	[
+	fromGregorian 2005 2 28,
+	fromGregorian 2004 2 29,
+	fromGregorian 2004 1 31,
+	fromGregorian 2004 12 31,
+	fromGregorian 2005 7 1,
+	fromGregorian 2005 4 21,
+	fromGregorian 2005 6 30
+	]
+
+increments :: [Integer]
+increments = [-10,-4,-1,0,1,7,83]
+
+adders :: [(String,Integer -> Day -> Day)]
+adders =
+	[
+	("day",addDays),
+	("month (clip)",addGregorianMonthsClip),
+	("month (roll over)",addGregorianMonthsRollOver),
+	("year (clip)",addGregorianYearsClip),
+	("year (roll over)",addGregorianYearsRollOver)
+	]
+
+resultDays :: [String]
+resultDays = do
+	(aname,adder) <- adders
+	increment <- increments
+	day <- days
+	return ((showGregorian day) ++ " + " ++ (show increment) ++ " * " ++ aname ++ " = " ++ showGregorian (adder increment day))
+
+addDaysTest :: Test
+addDaysTest = pureTest "addDays" $
+    diff addDaysRef $ unlines resultDays
diff --git a/Test/AddDaysRef.hs b/Test/AddDaysRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/AddDaysRef.hs
@@ -0,0 +1,250 @@
+module Test.AddDaysRef where
+
+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" ]
diff --git a/Test/ClipDates.hs b/Test/ClipDates.hs
new file mode 100644
--- /dev/null
+++ b/Test/ClipDates.hs
@@ -0,0 +1,46 @@
+{-# Language TupleSections #-}
+
+module Test.ClipDates where
+
+import Data.Time.Calendar.OrdinalDate
+import Data.Time.Calendar.WeekDate
+import Data.Time.Calendar
+import Test.TestUtil
+import Test.ClipDatesRef
+
+yearAndDay :: (Integer,Int) -> String
+yearAndDay (y,d) = (show y) ++ "-" ++ (show d) ++ " = " ++ (showOrdinalDate (fromOrdinalDate y d))
+
+gregorian :: (Integer,Int,Int) -> String
+gregorian (y,m,d) = (show y) ++ "-" ++ (show m) ++ "-" ++ (show d) ++ " = " ++ (showGregorian (fromGregorian y m d))
+
+iSOWeekDay :: (Integer,Int,Int) -> String
+iSOWeekDay (y,w,d) = (show y) ++ "-W" ++ (show w) ++ "-" ++ (show d) ++ " = " ++ (showWeekDate (fromWeekDate y w d))
+
+--
+
+tupleUp2 :: [a] -> [b] -> [(a, b)]
+tupleUp2 l1 l2 = concatMap (\e -> map (e,) l2) l1
+
+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
+
+--
+
+clipDates :: Test
+clipDates = pureTest "clipDates" $
+    let 
+        yad  = unlines $ map yearAndDay $ 
+            tupleUp2 [1968,1969,1971] [-4,0,1,200,364,365,366,367,700]
+                              
+
+        greg = unlines $ 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]
+
+        iso  = unlines $ map iSOWeekDay $ 
+            tupleUp3 [1968,1969,2004] [-20,-1,0,1,20,51,52,53,54] [-2,-1,0,1,4,6,7,8,9]
+
+    in diff clipDatesRef $ 
+        concat [ "YearAndDay\n", yad, "Gregorian\n", greg, "ISOWeekDay\n", iso ]
diff --git a/Test/ClipDatesRef.hs b/Test/ClipDatesRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/ClipDatesRef.hs
@@ -0,0 +1,566 @@
+module Test.ClipDatesRef where
+
+clipDatesRef :: String
+clipDatesRef =
+ unlines 
+  [ "YearAndDay"
+  , "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"
+  , "Gregorian"
+  , "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"
+  , "ISOWeekDay"
+  , "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" ]
diff --git a/Test/ConvertBack.hs b/Test/ConvertBack.hs
new file mode 100644
--- /dev/null
+++ b/Test/ConvertBack.hs
@@ -0,0 +1,40 @@
+module Test.ConvertBack where
+
+import Data.Time.Calendar.OrdinalDate
+import Data.Time.Calendar.Julian
+import Data.Time.Calendar.WeekDate
+import Data.Time.Calendar
+import Test.TestUtil
+
+checkDay :: (Show t) => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> String
+checkDay encodeDay decodeDay decodeDayValid day
+  = let st    = encodeDay day
+	day'  = decodeDay st
+	mday' = decodeDayValid st
+
+	a = if day /= day'
+	      then unwords [ show day, "-> "
+                           , show st,  "-> "
+                           , show day'
+                           , "(diff", show (diffDays day' day) ++ ")" ]
+	      else ""
+
+	b = if Just day /= mday'
+	      then unwords [show day, "->", show st, "->", show mday']
+	      else ""
+    in a ++ b
+		
+checkers :: [Day -> String]
+checkers
+  = [ checkDay toOrdinalDate (\(y,d) -> fromOrdinalDate y d) (\(y,d) -> fromOrdinalDateValid y d)
+    , checkDay toWeekDate (\(y,w,d) -> fromWeekDate y w d) (\(y,w,d) -> fromWeekDateValid y w d)
+    , checkDay toGregorian (\(y,m,d) -> fromGregorian y m d) (\(y,m,d) -> fromGregorianValid y m d)
+    , checkDay toJulian (\(y,m,d) -> fromJulian y m d) (\(y,m,d) -> fromJulianValid y m d) ]
+
+days :: [Day]
+days = [ModifiedJulianDay 50000 .. ModifiedJulianDay 50200] ++
+	(fmap (\year -> (fromGregorian year 1 4)) [1980..2000])
+
+convertBack :: Test
+convertBack = pureTest "convertBack" $
+    diff "" $ concatMap (\ch -> concatMap ch days) checkers
diff --git a/Test/CurrentTime.hs b/Test/CurrentTime.hs
new file mode 100644
--- /dev/null
+++ b/Test/CurrentTime.hs
@@ -0,0 +1,13 @@
+{-# OPTIONS -Wall -Werror #-}
+
+module Main where
+
+import Data.Time
+
+main :: IO ()
+main = do
+	now <- getCurrentTime
+	putStrLn (show (utctDay now) ++ "," ++ show (utctDayTime now))
+	putStrLn (show (utcToZonedTime utc now :: ZonedTime))
+	myzone <- getCurrentTimeZone
+	putStrLn (show (utcToZonedTime myzone now :: ZonedTime))
diff --git a/Test/LongWeekYears.hs b/Test/LongWeekYears.hs
new file mode 100644
--- /dev/null
+++ b/Test/LongWeekYears.hs
@@ -0,0 +1,20 @@
+module Test.LongWeekYears where
+
+import Data.Time.Calendar.WeekDate
+import Data.Time.Calendar
+import Test.TestUtil
+import Test.LongWeekYearsRef
+
+longYear :: Integer -> Bool
+longYear year = 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 " ") ]
+
+longWeekYears :: Test
+longWeekYears = pureTest "longWeekYears" $
+    diff longWeekYearsRef $ unlines $ map showLongYear [1901 .. 2050]
diff --git a/Test/LongWeekYearsRef.hs b/Test/LongWeekYearsRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/LongWeekYearsRef.hs
@@ -0,0 +1,155 @@
+module Test.LongWeekYearsRef where
+
+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:   " ]
diff --git a/Test/RealToFracBenchmark.hs b/Test/RealToFracBenchmark.hs
new file mode 100644
--- /dev/null
+++ b/Test/RealToFracBenchmark.hs
@@ -0,0 +1,22 @@
+{- Contributed by Liyang HU <haskell.org@liyang.hu> -}
+module Main where
+
+import Prelude
+import Control.Applicative
+import Control.Monad
+import Control.DeepSeq
+import Data.Time
+import Data.Time.Clock.POSIX
+import System.Random
+
+main :: IO ()
+main = do
+    ts <- replicateM 100000 $ do
+        t <- posixSecondsToUTCTime . realToFrac <$>
+            ( (*) . fromInteger <$> randomRIO (-15*10^21, 15*10^21) <*>
+                randomIO :: IO Double ) :: IO UTCTime
+        rnf t `seq` return t
+    now <- getCurrentTime
+    print . sum $ map (diffUTCTime now) ts
+    print =<< flip diffUTCTime now <$> getCurrentTime
+
diff --git a/Test/ShowDST.hs b/Test/ShowDST.hs
new file mode 100644
--- /dev/null
+++ b/Test/ShowDST.hs
@@ -0,0 +1,43 @@
+{-# OPTIONS -Wall -Werror #-}
+
+module Main where
+
+import Data.Time
+
+monthBeginning :: TimeZone -> Integer -> Int -> UTCTime
+monthBeginning zone year month = localTimeToUTC zone
+	(LocalTime (fromGregorian year month 1) midnight)
+
+findTransition :: UTCTime -> UTCTime -> IO [(UTCTime,TimeZone,TimeZone)]
+findTransition a b = do
+	za <- getTimeZone a
+	zb <- getTimeZone b
+	if za == zb then return [] else do
+		let c = addUTCTime ((diffUTCTime b a) / 2) a
+		if a == c then return [(b,za,zb)] else do
+			tp <- findTransition a c
+			tq <- findTransition c b
+			return (tp ++ tq)
+
+showZoneTime :: TimeZone -> UTCTime -> String
+showZoneTime zone time = show (utcToZonedTime zone time)
+
+showTransition :: (UTCTime,TimeZone,TimeZone) -> String
+showTransition (time,zone1,zone2) = (showZoneTime zone1 time) ++ " => " ++ (showZoneTime zone2 time)
+
+main :: IO ()
+main = do
+	now <- getCurrentTime
+	zone <- getTimeZone now
+	let (year,_,_) = toGregorian (localDay (utcToLocalTime zone now))
+	putStrLn ("DST adjustments for " ++ show year ++ ":")
+	let t0 = monthBeginning zone year 1
+	let t1 = monthBeginning zone year 4
+	let t2 = monthBeginning zone year 7
+	let t3 = monthBeginning zone year 10
+	let t4 = monthBeginning zone (year + 1) 1
+	tr1 <- findTransition t0 t1
+	tr2 <- findTransition t1 t2
+	tr3 <- findTransition t2 t3
+	tr4 <- findTransition t3 t4
+	mapM_ (putStrLn . showTransition) (tr1 ++ tr2 ++ tr3 ++ tr4)
diff --git a/Test/TAI_UTC_DAT.hs b/Test/TAI_UTC_DAT.hs
new file mode 100644
--- /dev/null
+++ b/Test/TAI_UTC_DAT.hs
@@ -0,0 +1,42 @@
+module Test.TAI_UTC_DAT where
+
+taiUTC_DAT :: String
+taiUTC_DAT =
+  unlines 
+  [ "1961 JAN  1 =JD 2437300.5  TAI-UTC=   1.4228180 S + (MJD - 37300.) X 0.001296 S"
+  , "1961 AUG  1 =JD 2437512.5  TAI-UTC=   1.3728180 S + (MJD - 37300.) X 0.001296 S"
+  , "1962 JAN  1 =JD 2437665.5  TAI-UTC=   1.8458580 S + (MJD - 37665.) X 0.0011232S"
+  , "1963 NOV  1 =JD 2438334.5  TAI-UTC=   1.9458580 S + (MJD - 37665.) X 0.0011232S"
+  , "1964 JAN  1 =JD 2438395.5  TAI-UTC=   3.2401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1964 APR  1 =JD 2438486.5  TAI-UTC=   3.3401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1964 SEP  1 =JD 2438639.5  TAI-UTC=   3.4401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1965 JAN  1 =JD 2438761.5  TAI-UTC=   3.5401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1965 MAR  1 =JD 2438820.5  TAI-UTC=   3.6401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1965 JUL  1 =JD 2438942.5  TAI-UTC=   3.7401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1965 SEP  1 =JD 2439004.5  TAI-UTC=   3.8401300 S + (MJD - 38761.) X 0.001296 S"
+  , "1966 JAN  1 =JD 2439126.5  TAI-UTC=   4.3131700 S + (MJD - 39126.) X 0.002592 S"
+  , "1968 FEB  1 =JD 2439887.5  TAI-UTC=   4.2131700 S + (MJD - 39126.) X 0.002592 S"
+  , "1972 JAN  1 =JD 2441317.5  TAI-UTC=  10.0       S + (MJD - 41317.) X 0.0      S"
+  , "1972 JUL  1 =JD 2441499.5  TAI-UTC=  11.0       S + (MJD - 41317.) X 0.0      S"
+  , "1973 JAN  1 =JD 2441683.5  TAI-UTC=  12.0       S + (MJD - 41317.) X 0.0      S"
+  , "1974 JAN  1 =JD 2442048.5  TAI-UTC=  13.0       S + (MJD - 41317.) X 0.0      S"
+  , "1975 JAN  1 =JD 2442413.5  TAI-UTC=  14.0       S + (MJD - 41317.) X 0.0      S"
+  , "1976 JAN  1 =JD 2442778.5  TAI-UTC=  15.0       S + (MJD - 41317.) X 0.0      S"
+  , "1977 JAN  1 =JD 2443144.5  TAI-UTC=  16.0       S + (MJD - 41317.) X 0.0      S"
+  , "1978 JAN  1 =JD 2443509.5  TAI-UTC=  17.0       S + (MJD - 41317.) X 0.0      S"
+  , "1979 JAN  1 =JD 2443874.5  TAI-UTC=  18.0       S + (MJD - 41317.) X 0.0      S"
+  , "1980 JAN  1 =JD 2444239.5  TAI-UTC=  19.0       S + (MJD - 41317.) X 0.0      S"
+  , "1981 JUL  1 =JD 2444786.5  TAI-UTC=  20.0       S + (MJD - 41317.) X 0.0      S"
+  , "1982 JUL  1 =JD 2445151.5  TAI-UTC=  21.0       S + (MJD - 41317.) X 0.0      S"
+  , "1983 JUL  1 =JD 2445516.5  TAI-UTC=  22.0       S + (MJD - 41317.) X 0.0      S"
+  , "1985 JUL  1 =JD 2446247.5  TAI-UTC=  23.0       S + (MJD - 41317.) X 0.0      S"
+  , "1988 JAN  1 =JD 2447161.5  TAI-UTC=  24.0       S + (MJD - 41317.) X 0.0      S"
+  , "1990 JAN  1 =JD 2447892.5  TAI-UTC=  25.0       S + (MJD - 41317.) X 0.0      S"
+  , "1991 JAN  1 =JD 2448257.5  TAI-UTC=  26.0       S + (MJD - 41317.) X 0.0      S"
+  , "1992 JUL  1 =JD 2448804.5  TAI-UTC=  27.0       S + (MJD - 41317.) X 0.0      S"
+  , "1993 JUL  1 =JD 2449169.5  TAI-UTC=  28.0       S + (MJD - 41317.) X 0.0      S"
+  , "1994 JUL  1 =JD 2449534.5  TAI-UTC=  29.0       S + (MJD - 41317.) X 0.0      S"
+  , "1996 JAN  1 =JD 2450083.5  TAI-UTC=  30.0       S + (MJD - 41317.) X 0.0      S"
+  , "1997 JUL  1 =JD 2450630.5  TAI-UTC=  31.0       S + (MJD - 41317.) X 0.0      S"
+  , "1999 JAN  1 =JD 2451179.5  TAI-UTC=  32.0       S + (MJD - 41317.) X 0.0      S"
+  , "2006 JAN  1 =JD 2453736.5  TAI-UTC=  33.0       S + (MJD - 41317.) X 0.0      S" ]
diff --git a/Test/TestCalendars.hs b/Test/TestCalendars.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestCalendars.hs
@@ -0,0 +1,30 @@
+module Test.TestCalendars where
+
+import Data.Time.Calendar.Julian
+import Data.Time.Calendar.WeekDate
+import Data.Time.Calendar
+import Test.TestUtil
+import Test.TestCalendarsRef
+
+showers :: [(String,Day -> String)]
+showers = [
+	("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
+	]
+
+testCalendars :: Test
+testCalendars = pureTest "testCalendars" $
+    diff testCalendarsRef $ unlines $ map (\d -> showShowers d) days
+  where
+    showShowers day = 
+        concatMap (\(nm,shower) -> unwords [" ==", nm, shower day]) showers
diff --git a/Test/TestCalendarsRef.hs b/Test/TestCalendarsRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestCalendarsRef.hs
@@ -0,0 +1,9 @@
+module Test.TestCalendarsRef where
+
+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" ]
diff --git a/Test/TestEaster.hs b/Test/TestEaster.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestEaster.hs
@@ -0,0 +1,38 @@
+{-# OPTIONS -Wall -Werror #-}
+
+module Test.TestEaster where
+
+import Data.Time.Calendar.Easter
+import Data.Time.Calendar
+import Data.Time.Format
+
+import System.Locale
+
+import Test.TestUtil
+import Test.TestEasterRef
+
+--
+
+days :: [Day]
+days = [ModifiedJulianDay 53000 .. ModifiedJulianDay 53014]
+
+showWithWDay :: Day -> String
+showWithWDay = formatTime defaultTimeLocale "%F %A"
+
+testEaster :: Test
+testEaster = pureTest "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 diff testEasterRef $ ds ++ concatMap (\y -> f y ++ g y) [2000..2020]
diff --git a/Test/TestEasterRef.hs b/Test/TestEasterRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestEasterRef.hs
@@ -0,0 +1,62 @@
+module Test.TestEasterRef where
+
+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" ]
diff --git a/Test/TestFormat.hs b/Test/TestFormat.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestFormat.hs
@@ -0,0 +1,186 @@
+{-# LANGUAGE ForeignFunctionInterface #-}
+
+module Test.TestFormat where
+
+import Data.Time
+import Data.Time.Clock.POSIX
+import Data.Char
+import System.Locale
+import Foreign
+import Foreign.C
+import Control.Exception;
+import Test.TestUtil
+
+{-
+	size_t format_time (
+	char *s, size_t maxsize,
+	const char *format,
+	int isdst,int gmtoff,time_t t);
+-}
+
+foreign import ccall unsafe "TestFormatStuff.h format_time" format_time :: CString -> CSize -> CString -> CInt -> CInt -> CString -> CTime -> IO CSize
+
+withBuffer :: Int -> (CString -> IO CSize) -> IO String
+withBuffer n f = withArray (replicate n 0) (\buffer -> do
+			len <- f buffer
+			peekCStringLen (buffer,fromIntegral len)
+		)
+
+unixFormatTime :: String -> TimeZone -> UTCTime -> IO String
+unixFormatTime fmt zone time = withCString fmt (\pfmt -> withCString (timeZoneName zone) (\pzonename ->
+		withBuffer 100 (\buffer -> format_time buffer 100 pfmt
+				(if timeZoneSummerOnly zone then 1 else 0)
+				(fromIntegral (timeZoneMinutes zone * 60))
+				pzonename
+				(fromInteger (truncate (utcTimeToPOSIXSeconds time)))
+			)
+		))
+
+locale :: TimeLocale
+locale = defaultTimeLocale {dateTimeFmt = "%a %b %e %H:%M:%S %Y"}
+
+zones :: [TimeZone]
+zones = [utc,TimeZone 87 True "Fenwickian Daylight Time"]
+
+baseTime0 :: UTCTime
+baseTime0 = localTimeToUTC utc (LocalTime (fromGregorian 1970 01 01) midnight)
+
+baseTime1 :: UTCTime
+baseTime1 = localTimeToUTC utc (LocalTime (fromGregorian 2000 01 01) midnight)
+
+getDay :: Integer -> UTCTime
+getDay day = addUTCTime ((fromInteger day) * posixDayLength) baseTime1
+
+getYearP1 :: Integer -> UTCTime
+getYearP1 year = localTimeToUTC utc (LocalTime (fromGregorian year 01 01) midnight)
+
+getYearP2 :: Integer -> UTCTime
+getYearP2 year = localTimeToUTC utc (LocalTime (fromGregorian year 02 04) midnight)
+
+getYearP3 :: Integer -> UTCTime
+getYearP3 year = localTimeToUTC utc (LocalTime (fromGregorian year 03 04) midnight)
+
+getYearP4 :: Integer -> UTCTime
+getYearP4 year = localTimeToUTC utc (LocalTime (fromGregorian year 12 31) midnight)
+
+years :: [Integer]
+years = [999,1000,1899,1900,1901] ++ [1980..2000] ++ [9999,10000]
+
+times :: [UTCTime]
+times = [baseTime0] ++ (fmap getDay [0..23]) ++ (fmap getDay [0..100]) ++
+	(fmap getYearP1 years) ++ (fmap getYearP2 years) ++ (fmap getYearP3 years) ++ (fmap getYearP4 years)
+
+padN :: Int -> Char -> String -> String
+padN n _ s | n <= (length s) = s
+padN n c s = (replicate (n - length s) c) ++ s
+
+unixWorkarounds :: String -> String -> String
+unixWorkarounds "%_Y" s = padN 4 ' ' s
+unixWorkarounds "%0Y" s = padN 4 '0' s
+unixWorkarounds "%_C" s = padN 2 ' ' s
+unixWorkarounds "%0C" s = padN 2 '0' s
+unixWorkarounds "%_G" s = padN 4 ' ' s
+unixWorkarounds "%0G" s = padN 4 '0' s
+unixWorkarounds "%_f" s = padN 2 ' ' s
+unixWorkarounds "%0f" s = padN 2 '0' s
+unixWorkarounds _ s = s
+
+compareFormat :: String -> (String -> String) -> String -> TimeZone -> UTCTime -> Test
+compareFormat testname modUnix fmt zone time = let
+    ctime = utcToZonedTime zone time 
+    haskellText = formatTime locale fmt ctime
+    in ioTest (testname ++ ": " ++ (show fmt) ++ " of " ++ (show ctime)) $
+    do
+       unixText <- unixFormatTime fmt zone time
+       let expectedText = unixWorkarounds fmt (modUnix unixText)
+       return $ diff expectedText haskellText
+
+-- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
+-- plus FgGklz
+-- f not supported
+-- P not always supported
+-- s time-zone dependent
+chars :: [Char]
+chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"
+
+-- as found in "man strftime" on a glibc system. '#' is different, though
+modifiers :: [Char]
+modifiers = "_-0^"
+
+formats :: [String]
+formats =  ["%G-W%V-%u","%U-%w","%W-%u"] ++ (fmap (\char -> '%':char:[]) chars)
+ ++ (concat (fmap (\char -> fmap (\modifier -> '%':modifier:char:[]) modifiers) chars))
+
+hashformats :: [String]
+hashformats =  (fmap (\char -> '%':'#':char:[]) chars)
+
+somestrings :: [String]
+somestrings = ["", " ", "-", "\n"]
+
+getBottom :: a -> IO (Maybe Control.Exception.SomeException);
+getBottom a = Control.Exception.catch (seq a (return Nothing)) (return . Just);    
+
+safeString :: String -> IO String
+safeString s = do
+ msx <- getBottom s
+ case msx of
+  Just sx -> return (show sx)
+  Nothing -> case s of
+   (c:cc) -> do
+    mcx <- getBottom c
+    case mcx of
+     Just cx -> return (show cx)
+     Nothing -> do
+      ss <- safeString cc
+      return (c:ss)
+   [] -> return ""
+
+compareExpected :: (Eq t,Show t,ParseTime t) => String -> String -> String -> Maybe t -> Test
+compareExpected testname fmt str expected = ioTest (testname ++ ": " ++ (show fmt) ++ " on " ++ (show str)) $ do
+    let found = parseTime defaultTimeLocale fmt str
+    mex <- getBottom found
+    case mex of
+        Just ex -> return $ Fail $ unwords [ "Exception: expected" , show expected ++ ", caught", show ex]
+        Nothing -> return $ diff expected found
+
+class (ParseTime t) => TestParse t where
+    expectedParse :: String -> String -> Maybe t
+    expectedParse "%Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
+    expectedParse "%_Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
+    expectedParse "%-Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
+    expectedParse "%0Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
+    expectedParse _ _ = Nothing
+
+instance TestParse Day
+instance TestParse TimeOfDay
+instance TestParse LocalTime
+instance TestParse TimeZone
+instance TestParse ZonedTime
+instance TestParse UTCTime
+
+checkParse :: String -> String -> [Test]
+checkParse fmt str
+  =         [ compareExpected "Day" fmt str (expectedParse fmt str :: Maybe Day)
+             , compareExpected "TimeOfDay" fmt str (expectedParse fmt str :: Maybe TimeOfDay)
+             , compareExpected "LocalTime" fmt str (expectedParse fmt str :: Maybe LocalTime)
+             , compareExpected "TimeZone" fmt str (expectedParse fmt str :: Maybe TimeZone)
+             , compareExpected "UTCTime" fmt str (expectedParse fmt str :: Maybe UTCTime) ]
+
+testCheckParse :: [Test]
+testCheckParse = concatMap (\fmt -> concatMap (\str -> checkParse fmt str) somestrings) formats
+
+testCompareFormat :: [Test]
+testCompareFormat = concatMap (\fmt -> concatMap (\time -> fmap (\zone -> compareFormat "compare format" id fmt zone time) zones) times) formats
+
+testCompareHashFormat :: [Test]
+testCompareHashFormat = concatMap (\fmt -> concatMap (\time -> fmap (\zone -> compareFormat "compare hashformat" (fmap toLower) fmt zone time) zones) times) hashformats
+
+testFormats :: [Test]
+testFormats = [
+    testGroup "checkParse" testCheckParse,
+    testGroup "compare format" testCompareFormat,
+    testGroup "compare hashformat" testCompareHashFormat
+    ]
+
+testFormat :: Test
+testFormat = testGroup "testFormat" testFormats
diff --git a/Test/TestFormatStuff.c b/Test/TestFormatStuff.c
new file mode 100644
--- /dev/null
+++ b/Test/TestFormatStuff.c
@@ -0,0 +1,15 @@
+#include "TestFormatStuff.h"
+
+size_t format_time (
+	char* buffer, size_t maxsize,
+	const char* format,
+	int isdst,int gmtoff,char* zonename,time_t t)
+{
+	t += gmtoff;
+	struct tm tmd;
+	gmtime_r(&t,&tmd);
+	tmd.tm_isdst = isdst;
+	tmd.tm_gmtoff = gmtoff;
+	tmd.tm_zone = zonename;
+	return strftime(buffer,maxsize,format,&tmd);
+}
diff --git a/Test/TestFormatStuff.h b/Test/TestFormatStuff.h
new file mode 100644
--- /dev/null
+++ b/Test/TestFormatStuff.h
@@ -0,0 +1,6 @@
+#include <time.h>
+
+size_t format_time (
+	char *s, size_t maxsize,
+	const char *format,
+	int isdst,int gmtoff,char* zonename,time_t t);
diff --git a/Test/TestMonthDay.hs b/Test/TestMonthDay.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestMonthDay.hs
@@ -0,0 +1,22 @@
+module Test.TestMonthDay where
+
+import Data.Time.Calendar.MonthDay
+import Test.TestUtil
+import Test.TestMonthDayRef
+
+showCompare :: (Eq a,Show a) => a -> String -> a -> String
+showCompare a1 b a2 | a1 == a2 = (show a1) ++ " == " ++ b
+showCompare a1 b a2 = "DIFF: " ++ (show a1) ++ " -> " ++ b ++ " -> " ++ (show a2)
+
+testMonthDay :: Test
+testMonthDay = pureTest "testMonthDay" $
+    diff testMonthDayRef $ concat $ map (\isL -> unlines (leap isL : yearDays isL)) [False,True]
+    where
+        leap isLeap = 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]
diff --git a/Test/TestMonthDayRef.hs b/Test/TestMonthDayRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestMonthDayRef.hs
@@ -0,0 +1,751 @@
+module Test.TestMonthDayRef where
+
+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" ]
diff --git a/Test/TestParseDAT.hs b/Test/TestParseDAT.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestParseDAT.hs
@@ -0,0 +1,53 @@
+module Test.TestParseDAT where
+
+import Data.Time
+import Data.Time.Clock.TAI
+import Test.TestUtil
+import Test.TestParseDAT_Ref
+import Test.TAI_UTC_DAT
+
+tods :: [TimeOfDay]
+tods = [
+	TimeOfDay 0 0 0,
+	TimeOfDay 0 0 0.5,
+	TimeOfDay 0 0 1,
+	TimeOfDay 0 0 1.5,
+	TimeOfDay 0 0 2,
+	TimeOfDay 23 59 28,
+	TimeOfDay 23 59 28.5,
+	TimeOfDay 23 59 29,
+	TimeOfDay 23 59 29.5,
+	TimeOfDay 23 59 30,
+	TimeOfDay 23 59 30.5,
+	TimeOfDay 23 59 31,
+	TimeOfDay 23 59 31.5,
+	TimeOfDay 23 59 32,
+	TimeOfDay 23 59 59,
+	TimeOfDay 23 59 59.5,
+	TimeOfDay 23 59 60,
+	TimeOfDay 23 59 60.5
+	]
+
+times :: [LocalTime]
+times =
+	fmap (LocalTime (fromGregorian 1998 04 02)) tods ++
+	fmap (LocalTime (fromGregorian 1998 12 30)) tods ++
+	fmap (LocalTime (fromGregorian 1998 12 31)) tods ++
+	fmap (LocalTime (fromGregorian 1999 01 01)) tods ++
+	fmap (LocalTime (fromGregorian 1999 01 02)) tods
+
+testParseDAT :: Test
+testParseDAT = pureTest "testParseDAT" $ diff testParseDAT_Ref parseDAT where
+    parseDAT = 
+        let lst = parseTAIUTCDATFile taiUTC_DAT in 
+        unlines $ map
+        (\lt ->
+            let
+                utcTime  = localTimeToUTC utc lt
+                taiTime  = utcToTAITime lst utcTime
+                utcTime' = taiToUTCTime lst taiTime
+            in if utcTime == utcTime'
+                then unwords [show utcTime, "==", show taiTime]
+                else unwords [ "correction:", show utcTime, "->", show taiTime, "->", show utcTime']
+        )
+        times
diff --git a/Test/TestParseDAT_Ref.hs b/Test/TestParseDAT_Ref.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestParseDAT_Ref.hs
@@ -0,0 +1,95 @@
+module Test.TestParseDAT_Ref where
+
+testParseDAT_Ref :: String
+testParseDAT_Ref =
+ unlines
+  [ "1998-04-02 00:00:00 UTC == 1998-04-02 00:00:31 TAI"
+  , "1998-04-02 00:00:00.5 UTC == 1998-04-02 00:00:31.5 TAI"
+  , "1998-04-02 00:00:01 UTC == 1998-04-02 00:00:32 TAI"
+  , "1998-04-02 00:00:01.5 UTC == 1998-04-02 00:00:32.5 TAI"
+  , "1998-04-02 00:00:02 UTC == 1998-04-02 00:00:33 TAI"
+  , "1998-04-02 23:59:28 UTC == 1998-04-02 23:59:59 TAI"
+  , "1998-04-02 23:59:28.5 UTC == 1998-04-02 23:59:59.5 TAI"
+  , "1998-04-02 23:59:29 UTC == 1998-04-03 00:00:00 TAI"
+  , "1998-04-02 23:59:29.5 UTC == 1998-04-03 00:00:00.5 TAI"
+  , "1998-04-02 23:59:30 UTC == 1998-04-03 00:00:01 TAI"
+  , "1998-04-02 23:59:30.5 UTC == 1998-04-03 00:00:01.5 TAI"
+  , "1998-04-02 23:59:31 UTC == 1998-04-03 00:00:02 TAI"
+  , "1998-04-02 23:59:31.5 UTC == 1998-04-03 00:00:02.5 TAI"
+  , "1998-04-02 23:59:32 UTC == 1998-04-03 00:00:03 TAI"
+  , "1998-04-02 23:59:59 UTC == 1998-04-03 00:00:30 TAI"
+  , "1998-04-02 23:59:59.5 UTC == 1998-04-03 00:00:30.5 TAI"
+  , "correction: 1998-04-02 23:59:60 UTC -> 1998-04-03 00:00:31 TAI -> 1998-04-03 00:00:00 UTC"
+  , "correction: 1998-04-02 23:59:60.5 UTC -> 1998-04-03 00:00:31.5 TAI -> 1998-04-03 00:00:00.5 UTC"
+  , "1998-12-30 00:00:00 UTC == 1998-12-30 00:00:31 TAI"
+  , "1998-12-30 00:00:00.5 UTC == 1998-12-30 00:00:31.5 TAI"
+  , "1998-12-30 00:00:01 UTC == 1998-12-30 00:00:32 TAI"
+  , "1998-12-30 00:00:01.5 UTC == 1998-12-30 00:00:32.5 TAI"
+  , "1998-12-30 00:00:02 UTC == 1998-12-30 00:00:33 TAI"
+  , "1998-12-30 23:59:28 UTC == 1998-12-30 23:59:59 TAI"
+  , "1998-12-30 23:59:28.5 UTC == 1998-12-30 23:59:59.5 TAI"
+  , "1998-12-30 23:59:29 UTC == 1998-12-31 00:00:00 TAI"
+  , "1998-12-30 23:59:29.5 UTC == 1998-12-31 00:00:00.5 TAI"
+  , "1998-12-30 23:59:30 UTC == 1998-12-31 00:00:01 TAI"
+  , "1998-12-30 23:59:30.5 UTC == 1998-12-31 00:00:01.5 TAI"
+  , "1998-12-30 23:59:31 UTC == 1998-12-31 00:00:02 TAI"
+  , "1998-12-30 23:59:31.5 UTC == 1998-12-31 00:00:02.5 TAI"
+  , "1998-12-30 23:59:32 UTC == 1998-12-31 00:00:03 TAI"
+  , "1998-12-30 23:59:59 UTC == 1998-12-31 00:00:30 TAI"
+  , "1998-12-30 23:59:59.5 UTC == 1998-12-31 00:00:30.5 TAI"
+  , "correction: 1998-12-30 23:59:60 UTC -> 1998-12-31 00:00:31 TAI -> 1998-12-31 00:00:00 UTC"
+  , "correction: 1998-12-30 23:59:60.5 UTC -> 1998-12-31 00:00:31.5 TAI -> 1998-12-31 00:00:00.5 UTC"
+  , "1998-12-31 00:00:00 UTC == 1998-12-31 00:00:31 TAI"
+  , "1998-12-31 00:00:00.5 UTC == 1998-12-31 00:00:31.5 TAI"
+  , "1998-12-31 00:00:01 UTC == 1998-12-31 00:00:32 TAI"
+  , "1998-12-31 00:00:01.5 UTC == 1998-12-31 00:00:32.5 TAI"
+  , "1998-12-31 00:00:02 UTC == 1998-12-31 00:00:33 TAI"
+  , "1998-12-31 23:59:28 UTC == 1998-12-31 23:59:59 TAI"
+  , "1998-12-31 23:59:28.5 UTC == 1998-12-31 23:59:59.5 TAI"
+  , "1998-12-31 23:59:29 UTC == 1999-01-01 00:00:00 TAI"
+  , "1998-12-31 23:59:29.5 UTC == 1999-01-01 00:00:00.5 TAI"
+  , "1998-12-31 23:59:30 UTC == 1999-01-01 00:00:01 TAI"
+  , "1998-12-31 23:59:30.5 UTC == 1999-01-01 00:00:01.5 TAI"
+  , "1998-12-31 23:59:31 UTC == 1999-01-01 00:00:02 TAI"
+  , "1998-12-31 23:59:31.5 UTC == 1999-01-01 00:00:02.5 TAI"
+  , "1998-12-31 23:59:32 UTC == 1999-01-01 00:00:03 TAI"
+  , "1998-12-31 23:59:59 UTC == 1999-01-01 00:00:30 TAI"
+  , "1998-12-31 23:59:59.5 UTC == 1999-01-01 00:00:30.5 TAI"
+  , "1998-12-31 23:59:60 UTC == 1999-01-01 00:00:31 TAI"
+  , "1998-12-31 23:59:60.5 UTC == 1999-01-01 00:00:31.5 TAI"
+  , "1999-01-01 00:00:00 UTC == 1999-01-01 00:00:32 TAI"
+  , "1999-01-01 00:00:00.5 UTC == 1999-01-01 00:00:32.5 TAI"
+  , "1999-01-01 00:00:01 UTC == 1999-01-01 00:00:33 TAI"
+  , "1999-01-01 00:00:01.5 UTC == 1999-01-01 00:00:33.5 TAI"
+  , "1999-01-01 00:00:02 UTC == 1999-01-01 00:00:34 TAI"
+  , "1999-01-01 23:59:28 UTC == 1999-01-02 00:00:00 TAI"
+  , "1999-01-01 23:59:28.5 UTC == 1999-01-02 00:00:00.5 TAI"
+  , "1999-01-01 23:59:29 UTC == 1999-01-02 00:00:01 TAI"
+  , "1999-01-01 23:59:29.5 UTC == 1999-01-02 00:00:01.5 TAI"
+  , "1999-01-01 23:59:30 UTC == 1999-01-02 00:00:02 TAI"
+  , "1999-01-01 23:59:30.5 UTC == 1999-01-02 00:00:02.5 TAI"
+  , "1999-01-01 23:59:31 UTC == 1999-01-02 00:00:03 TAI"
+  , "1999-01-01 23:59:31.5 UTC == 1999-01-02 00:00:03.5 TAI"
+  , "1999-01-01 23:59:32 UTC == 1999-01-02 00:00:04 TAI"
+  , "1999-01-01 23:59:59 UTC == 1999-01-02 00:00:31 TAI"
+  , "1999-01-01 23:59:59.5 UTC == 1999-01-02 00:00:31.5 TAI"
+  , "correction: 1999-01-01 23:59:60 UTC -> 1999-01-02 00:00:32 TAI -> 1999-01-02 00:00:00 UTC"
+  , "correction: 1999-01-01 23:59:60.5 UTC -> 1999-01-02 00:00:32.5 TAI -> 1999-01-02 00:00:00.5 UTC"
+  , "1999-01-02 00:00:00 UTC == 1999-01-02 00:00:32 TAI"
+  , "1999-01-02 00:00:00.5 UTC == 1999-01-02 00:00:32.5 TAI"
+  , "1999-01-02 00:00:01 UTC == 1999-01-02 00:00:33 TAI"
+  , "1999-01-02 00:00:01.5 UTC == 1999-01-02 00:00:33.5 TAI"
+  , "1999-01-02 00:00:02 UTC == 1999-01-02 00:00:34 TAI"
+  , "1999-01-02 23:59:28 UTC == 1999-01-03 00:00:00 TAI"
+  , "1999-01-02 23:59:28.5 UTC == 1999-01-03 00:00:00.5 TAI"
+  , "1999-01-02 23:59:29 UTC == 1999-01-03 00:00:01 TAI"
+  , "1999-01-02 23:59:29.5 UTC == 1999-01-03 00:00:01.5 TAI"
+  , "1999-01-02 23:59:30 UTC == 1999-01-03 00:00:02 TAI"
+  , "1999-01-02 23:59:30.5 UTC == 1999-01-03 00:00:02.5 TAI"
+  , "1999-01-02 23:59:31 UTC == 1999-01-03 00:00:03 TAI"
+  , "1999-01-02 23:59:31.5 UTC == 1999-01-03 00:00:03.5 TAI"
+  , "1999-01-02 23:59:32 UTC == 1999-01-03 00:00:04 TAI"
+  , "1999-01-02 23:59:59 UTC == 1999-01-03 00:00:31 TAI"
+  , "1999-01-02 23:59:59.5 UTC == 1999-01-03 00:00:31.5 TAI"
+  , "correction: 1999-01-02 23:59:60 UTC -> 1999-01-03 00:00:32 TAI -> 1999-01-03 00:00:00 UTC"
+  , "correction: 1999-01-02 23:59:60.5 UTC -> 1999-01-03 00:00:32.5 TAI -> 1999-01-03 00:00:00.5 UTC" ]
diff --git a/Test/TestParseTime.hs b/Test/TestParseTime.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestParseTime.hs
@@ -0,0 +1,438 @@
+{-# OPTIONS -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}
+{-# LANGUAGE FlexibleInstances, ExistentialQuantification #-}
+
+module Test.TestParseTime where
+
+import Control.Monad
+import Data.Char
+import Data.Ratio
+import Data.Time
+import Data.Time.Calendar.OrdinalDate
+import Data.Time.Calendar.WeekDate
+import Data.Time.Clock.POSIX
+import System.Locale
+import Test.QuickCheck hiding (Result)
+import Test.TestUtil
+
+ntest :: Int
+ntest = 1000
+
+type NamedProperty = (String, Property)
+
+testParseTime :: Test
+testParseTime = testGroup "testParseTime"
+    [
+    testGroup "extests" extests,
+    testGroup "properties" (fmap (\(n,prop) -> testProperty n prop) properties)
+    ]
+
+yearDays :: Integer -> [Day]
+yearDays y = [(fromGregorian y 1 1) .. (fromGregorian y 12 31)]
+
+makeExhaustiveTest :: String -> [t] -> (t -> Test) -> Test
+makeExhaustiveTest name cases f = testGroup name (fmap f cases)
+
+extests :: [Test]
+extests = [
+    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 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])
+
+parseYMD :: Day -> Test
+parseYMD day = case toGregorian day of
+    (y,m,d) -> parseTest (Just day) "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))
+
+parseYearDayD :: Day -> Test
+parseYearDayD day = case toGregorian day of
+    (y,m,d) -> parseTest (Just day) "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))
+
+parseYearDayE :: Day -> Test
+parseYearDayE day = case toGregorian day of
+    (y,m,d) -> parseTest (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 -> Test
+parseYY i = parseTest (Just (fromGregorian (expectedYear i) 1 1)) "%y" (show2 i)
+
+parseCYY :: Integer -> Integer -> Test
+parseCYY c i = parseTest (Just (fromGregorian ((c * 100) + i) 1 1)) "%-C %y" ((show c) ++ " " ++ (show2 i))
+
+parseCYY2 :: Integer -> Integer -> Test
+parseCYY2 c i = parseTest (Just (fromGregorian ((c * 100) + i) 1 1)) "%C %y" ((show2 c) ++ " " ++ (show2 i))
+
+parseCentury :: String -> Integer -> Test
+parseCentury int c = parseTest (Just (fromGregorian (c * 100) 1 1)) ("%-C" ++ int ++ "%y") ((show c) ++ int ++ "00")
+
+parseTest :: (Show t, Eq t, ParseTime t) => Maybe t -> String -> String -> Test
+parseTest expected formatStr target = 
+    let
+        found = parse formatStr target
+        result = diff expected found
+        name = (show formatStr) ++ " of " ++ (show target)
+    in pureTest name result
+
+readsTest :: (Show t, Eq t, ParseTime t) => Maybe t -> String -> String -> Test
+readsTest expected formatStr target = 
+    let
+        ff (Just e) = [(e,"")]
+        ff Nothing = []
+        found = readsTime defaultTimeLocale formatStr target
+        result = diff (ff expected) found
+        name = (show formatStr) ++ " of " ++ (show target)
+    in pureTest name result
+
+parse :: ParseTime t => String -> String -> Maybe t
+parse f t = parseTime defaultTimeLocale f t
+
+format :: (FormatTime t) => String -> t -> String
+format f t = formatTime defaultTimeLocale f t
+
+instance Arbitrary Day where
+    arbitrary = liftM ModifiedJulianDay $ choose (-313698, 2973483) -- 1000-01-1 to 9999-12-31
+
+instance CoArbitrary Day where
+    coarbitrary (ModifiedJulianDay d) = coarbitrary d
+
+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)
+              secondsToDiffTime' :: Integer -> DiffTime
+              secondsToDiffTime' = fromInteger
+              picosecondsToDiffTime' :: Integer -> DiffTime
+              picosecondsToDiffTime' x = fromRational (x % 10^12)
+
+instance CoArbitrary DiffTime where
+    coarbitrary t = coarbitrary (fromEnum t)
+
+instance Arbitrary TimeOfDay where
+    arbitrary = liftM timeToTimeOfDay arbitrary
+
+instance CoArbitrary TimeOfDay where
+    coarbitrary t = coarbitrary (timeOfDayToTime t)
+
+instance Arbitrary LocalTime where
+    arbitrary = liftM2 LocalTime arbitrary arbitrary
+
+instance CoArbitrary LocalTime where
+    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer)
+
+instance Arbitrary TimeZone where
+    arbitrary = liftM minutesToTimeZone $ choose (-720,720)
+
+instance CoArbitrary TimeZone where
+    coarbitrary tz = coarbitrary (timeZoneMinutes tz)
+
+instance Arbitrary ZonedTime where
+    arbitrary = liftM2 ZonedTime arbitrary arbitrary
+
+instance CoArbitrary ZonedTime where
+    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer)
+
+instance Arbitrary UTCTime where
+    arbitrary = liftM2 UTCTime arbitrary arbitrary
+
+instance CoArbitrary UTCTime where
+    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds t) :: Integer)
+
+-- missing from the time package
+instance Eq ZonedTime where
+    ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2
+
+-- 
+-- * tests for dbugging 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 f s `asTypeOf` Just t)
+
+--
+-- * show and read 
+--
+
+prop_read_show :: (Read a, Show a, Eq a) => a -> Bool
+prop_read_show t = read (show t) == t
+
+--
+-- * special show functions
+--
+
+prop_parse_showWeekDate :: Day -> Bool
+prop_parse_showWeekDate d = parse "%G-W%V-%u" (showWeekDate d) == Just d
+
+prop_parse_showGregorian :: Day -> Bool
+prop_parse_showGregorian d = parse "%Y-%m-%d" (showGregorian d) == Just d
+
+prop_parse_showOrdinalDate :: Day -> Bool
+prop_parse_showOrdinalDate d = parse "%Y-%j" (showOrdinalDate d) == Just d
+
+--
+-- * fromMondayStartWeek and fromSundayStartWeek
+--
+
+prop_fromMondayStartWeek :: Day -> Bool
+prop_fromMondayStartWeek d = 
+    let (w,wd)  = mondayStartWeek d
+        (y,_,_) = toGregorian d
+     in fromMondayStartWeek y w wd == d
+
+prop_fromSundayStartWeek :: Day -> Bool
+prop_fromSundayStartWeek d = 
+    let (w,wd)  = sundayStartWeek d
+        (y,_,_) = toGregorian d
+     in fromSundayStartWeek y w wd == d
+
+--
+-- * format and parse 
+--
+
+-- | Helper for defining named properties.
+prop_named :: (Arbitrary t, Show t, Testable a)
+           => String -> (FormatString s -> t -> a) -> String -> FormatString s -> NamedProperty
+prop_named n prop typeName f = (n ++ " " ++ typeName ++ " " ++ show f, property (prop f))
+
+prop_parse_format :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
+prop_parse_format (FormatString f) t = parse f (format f t) == Just t
+
+prop_parse_format_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
+                           => String -> FormatString t -> NamedProperty
+prop_parse_format_named = prop_named "prop_parse_format" prop_parse_format
+
+-- Verify case-insensitivity with upper case.
+prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
+prop_parse_format_upper (FormatString f) t = parse f (map toUpper $ format f t) == Just t
+
+prop_parse_format_upper_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
+                              => String -> FormatString t -> NamedProperty
+prop_parse_format_upper_named = prop_named "prop_parse_format_upper" prop_parse_format_upper
+
+-- Verify case-insensitivity with lower case.
+prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
+prop_parse_format_lower (FormatString f) t = parse f (map toLower $ format f t) == Just t
+
+prop_parse_format_lower_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
+                              => String -> FormatString t -> NamedProperty
+prop_parse_format_lower_named = prop_named "prop_parse_format_lower" prop_parse_format_lower
+
+prop_format_parse_format :: (FormatTime t, ParseTime t) => FormatString t -> t -> Bool
+prop_format_parse_format (FormatString f) t = 
+    fmap (format f) (parse f (format f t) `asTypeOf` Just t) == Just (format f t)
+
+prop_format_parse_format_named :: (Arbitrary t, Show t, FormatTime t, ParseTime t) 
+                                  => String -> FormatString t -> NamedProperty
+prop_format_parse_format_named = prop_named "prop_format_parse_format" prop_format_parse_format
+
+--
+-- * 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 f s of
+      Nothing -> True
+      Just t  -> t == t `asTypeOf` formatType fs
+  where 
+prop_no_crash_bad_input_named :: (Eq t, ParseTime t)
+                                 => String -> FormatString t -> NamedProperty
+prop_no_crash_bad_input_named = prop_named "prop_no_crash_bad_input" prop_no_crash_bad_input
+
+--
+--
+--
+
+newtype FormatString a = FormatString String
+
+formatType :: FormatString t -> t
+formatType _ = undefined
+
+castFormatString :: FormatString a -> FormatString b
+castFormatString (FormatString f) = FormatString f
+
+instance Show (FormatString a) where
+    show (FormatString f) = show f
+
+properties :: [NamedProperty]
+properties = 
+    [("prop_fromMondayStartWeek", property prop_fromMondayStartWeek),
+     ("prop_fromSundayStartWeek", property prop_fromSundayStartWeek)]
+ ++ [("prop_read_show Day", property (prop_read_show :: Day -> Bool)),
+     ("prop_read_show TimeOfDay", property (prop_read_show :: TimeOfDay -> Bool)),
+     ("prop_read_show LocalTime", property (prop_read_show :: LocalTime -> Bool)),
+     ("prop_read_show TimeZone", property (prop_read_show :: TimeZone -> Bool)),
+     ("prop_read_show ZonedTime", property (prop_read_show :: ZonedTime -> Bool)),
+     ("prop_read_show UTCTime", property (prop_read_show :: UTCTime -> Bool))]
+ ++ [("prop_parse_showWeekDate", property prop_parse_showWeekDate),
+     ("prop_parse_showGregorian", property prop_parse_showGregorian),
+     ("prop_parse_showOrdinalDate", property prop_parse_showOrdinalDate)]
+
+ ++ map (prop_parse_format_named "Day") dayFormats
+ ++ map (prop_parse_format_named "TimeOfDay") timeOfDayFormats
+ ++ map (prop_parse_format_named "LocalTime") localTimeFormats
+ ++ map (prop_parse_format_named "TimeZone") timeZoneFormats
+ ++ map (prop_parse_format_named "ZonedTime") zonedTimeFormats
+ ++ map (prop_parse_format_named "UTCTime") utcTimeFormats
+
+ ++ map (prop_parse_format_upper_named "Day") dayFormats
+ ++ map (prop_parse_format_upper_named "TimeOfDay") timeOfDayFormats
+ ++ map (prop_parse_format_upper_named "LocalTime") localTimeFormats
+ ++ map (prop_parse_format_upper_named "TimeZone") timeZoneFormats
+ ++ map (prop_parse_format_upper_named "ZonedTime") zonedTimeFormats
+ ++ map (prop_parse_format_upper_named "UTCTime") utcTimeFormats
+
+ ++ map (prop_parse_format_lower_named "Day") dayFormats
+ ++ map (prop_parse_format_lower_named "TimeOfDay") timeOfDayFormats
+ ++ map (prop_parse_format_lower_named "LocalTime") localTimeFormats
+ ++ map (prop_parse_format_lower_named "TimeZone") timeZoneFormats
+ ++ map (prop_parse_format_lower_named "ZonedTime") zonedTimeFormats
+ ++ map (prop_parse_format_lower_named "UTCTime") utcTimeFormats
+
+ ++ map (prop_format_parse_format_named "Day") partialDayFormats
+ ++ map (prop_format_parse_format_named "TimeOfDay") partialTimeOfDayFormats
+ ++ map (prop_format_parse_format_named "LocalTime") partialLocalTimeFormats
+ ++ map (prop_format_parse_format_named "ZonedTime") partialZonedTimeFormats
+ ++ map (prop_format_parse_format_named "UTCTime") partialUTCTimeFormats
+
+ ++ map (prop_no_crash_bad_input_named "Day") (dayFormats ++ partialDayFormats ++ failingPartialDayFormats)
+ ++ map (prop_no_crash_bad_input_named "TimeOfDay") (timeOfDayFormats ++ partialTimeOfDayFormats)
+ ++ map (prop_no_crash_bad_input_named "LocalTime") (localTimeFormats ++ partialLocalTimeFormats)
+ ++ map (prop_no_crash_bad_input_named "TimeZone") (timeZoneFormats)
+ ++ map (prop_no_crash_bad_input_named "ZonedTime") (zonedTimeFormats ++ partialZonedTimeFormats)
+ ++ map (prop_no_crash_bad_input_named "UTCTime") (utcTimeFormats ++ partialUTCTimeFormats)
+
+
+
+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",
+     -- ordinal dates
+     "%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"
+    ]
+
+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 $ 
+  []
+{-
+  -- there's soo many of them...
+  concat [ [df ++ " " ++ tf, tf ++ " " ++ df] | FormatString df <- dayFormats, 
+                                                   FormatString tf <- timeOfDayFormats]
+-}
+
+timeZoneFormats :: [FormatString TimeZone]
+timeZoneFormats = map FormatString ["%z","%z%Z","%Z%z","%Z"]
+
+zonedTimeFormats :: [FormatString ZonedTime]
+zonedTimeFormats = map FormatString
+  ["%a, %d %b %Y %H:%M:%S.%q %z", "%a, %d %b %Y %H:%M:%S%Q %z", "%s.%q %z", "%s%Q %z",
+   "%a, %d %b %Y %H:%M:%S.%q %Z", "%a, %d %b %Y %H:%M:%S%Q %Z", "%s.%q %Z", "%s%Q %Z"]
+
+utcTimeFormats :: [FormatString UTCTime]
+utcTimeFormats = map FormatString 
+  ["%s.%q","%s%Q"]
+
+--
+-- * Formats that do not include all the information
+--
+
+partialDayFormats :: [FormatString Day]
+partialDayFormats = map FormatString
+    [ ]
+
+partialTimeOfDayFormats :: [FormatString TimeOfDay]
+partialTimeOfDayFormats = map FormatString
+    [ ]
+
+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"
+    ]
+
+
+--
+-- * Known failures
+--
+
+knownFailures :: [NamedProperty]
+knownFailures =
+    map (prop_format_parse_format_named "Day") failingPartialDayFormats
+
+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"
+    ]
diff --git a/Test/TestTime.hs b/Test/TestTime.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestTime.hs
@@ -0,0 +1,106 @@
+module Test.TestTime where
+
+import Data.Time.Calendar.OrdinalDate
+import Data.Time.Calendar.WeekDate
+import Data.Time
+import Test.TestUtil
+import Test.TestTimeRef
+
+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') ++ "!" ]
+
+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] ]
+
+showUTCTime :: UTCTime -> String
+showUTCTime (UTCTime d t) =  show (toModifiedJulianDay d) ++ "," ++ show t
+
+myzone :: TimeZone
+myzone = hoursToTimeZone (- 8)
+
+leapSec1998Cal :: LocalTime
+leapSec1998Cal = LocalTime (fromGregorian 1998 12 31) (TimeOfDay 23 59 60.5)
+
+leapSec1998 :: UTCTime
+leapSec1998 = localTimeToUTC utc leapSec1998Cal
+
+testUTC :: String
+testUTC
+  = 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
+
+poslong :: Rational
+poslong = 120
+
+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 ]
+
+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 ]
+
+testTime :: Test
+testTime = pureTest "testTime" $
+    diff testTimeRef $ unlines [testCal, testUTC, testUT1, testTimeOfDayToDayFraction]
diff --git a/Test/TestTimeRef.hs b/Test/TestTimeRef.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestTimeRef.hs
@@ -0,0 +1,881 @@
+module Test.TestTimeRef where
+
+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"
+  ,"" ]
diff --git a/Test/TestUtil.hs b/Test/TestUtil.hs
new file mode 100644
--- /dev/null
+++ b/Test/TestUtil.hs
@@ -0,0 +1,38 @@
+{-# OPTIONS -fno-warn-overlapping-patterns #-}
+module Test.TestUtil
+    (
+    module Test.TestUtil,
+    module Test.Framework,
+    module Test.Framework.Providers.QuickCheck2
+    ) where
+
+import Test.Framework
+import Test.Framework.Providers.API
+import Test.Framework.Providers.QuickCheck2
+
+data Result = Pass | Fail String
+
+instance Show Result where
+    show Pass = "passed"
+    show (Fail s) = "failed: " ++ s
+
+instance TestResultlike () Result where
+    testSucceeded Pass = True
+    testSucceeded (Fail _) = False
+
+instance Testlike () Result (IO Result) where
+    testTypeName _ = "Cases"
+    runTest _ ior = do
+        r <- ior
+        return (Finished r,return ())
+
+ioTest :: String -> IO Result -> Test
+ioTest = Test
+
+pureTest :: String -> Result -> Test
+pureTest name result = ioTest name (return result)
+
+diff :: (Show a,Eq a) => a -> a -> Result
+diff expected found | expected == found = Pass
+diff expected found = Fail ("expected " ++ (show expected) ++ " but found " ++ (show found))
+
diff --git a/Test/Tests.hs b/Test/Tests.hs
new file mode 100644
--- /dev/null
+++ b/Test/Tests.hs
@@ -0,0 +1,28 @@
+module Test.Tests where
+
+import Test.Framework
+
+import Test.AddDays
+import Test.ClipDates
+import Test.ConvertBack
+import Test.LongWeekYears
+import Test.TestCalendars
+import Test.TestEaster
+import Test.TestFormat
+import Test.TestMonthDay
+import Test.TestParseDAT
+import Test.TestParseTime
+import Test.TestTime
+
+tests :: [Test]
+tests = [ addDaysTest
+        , clipDates
+        , convertBack
+        , longWeekYears
+        , testCalendars
+        , testEaster
+        , testFormat
+        , testMonthDay
+        , testParseDAT
+        , testParseTime
+        , testTime ]
diff --git a/Test/TimeZone.hs b/Test/TimeZone.hs
new file mode 100644
--- /dev/null
+++ b/Test/TimeZone.hs
@@ -0,0 +1,10 @@
+{-# OPTIONS -Wall -Werror #-}
+
+module Main where
+
+import Data.Time
+
+main :: IO ()
+main = do
+	zone <- getCurrentTimeZone
+	putStrLn (timeZoneOffsetString zone)
diff --git a/Test/UseCases.lhs b/Test/UseCases.lhs
new file mode 100644
--- /dev/null
+++ b/Test/UseCases.lhs
@@ -0,0 +1,83 @@
+> module UseCases where
+> import Data.Time.Calendar.OrdinalDate
+> import Data.Time
+> import System.Locale
+
+
+From Brian Smith:
+<http://www.haskell.org/pipermail/libraries/2005-July/004060.html>
+
+Use cases (primarily taken from real-world corporate IT applications I have 
+developed) :
+
+* What is the equivalent (or closest aproximation) of the SQL DateTime type 
+(date and time without any timezone information)? What is the equivalent of 
+the SQL Date type (date without any timezone information)?
+
+> type SQLDateTime = LocalTime
+> type SQLDate = Day
+
+* The user enters a date as "7/4/2005." How do I determine if this date is 
+before or after July 1st of this year?
+
+TODO: Parsing
+
+* How do I present the date "July 1st of this year" to the user in M/D/YYYY 
+format?
+
+> july1st = do
+>    now <- getZonedTime
+>    let (thisYear,_,_) = toGregorian (localDay (zonedTimeToLocalTime now))
+>    let day = fromGregorian thisYear 7 1
+>    return (formatTime defaultTimeLocale "%m/%d/%Y" day)
+
+This actually gives "07/01/2005" rather than "7/1/2005".
+ISSUE: Should I make additional %-codes for this?
+
+
+* How do I truncate a datetime to midnight of the same day? How do I 
+truncate a date to the first of the month? How do I truncate a date to the 
+first day of the year it occurred in?
+
+> truncateToMidnight (LocalTime day _) = (LocalTime day midnight)
+
+> truncateToFirstOfMonth day = fromGregorian y m 1 where
+>    (y,m,_) = toGregorian day
+
+> truncateToJan1st day = fromOrdinalDate y 1 where
+>    (y,_) = toOrdinalDate day
+
+* Given a date X, how do I find the last day of the month that X occurs in. 
+For example, If X is July 4th, 2005, then I want the result to be July 31st, 
+2005. If X is Februrary 5, then I want the result to be Februrary 28 for 
+non-leap-years and February 29 for leap years.
+
+> lastDayOfMonth day = fromGregorian y m (gregorianMonthLength y m) where
+>    (y,m,_) = toGregorian day
+
+* The user enters a time T with no date, e.g. "17:30". How do I merge this 
+time onto a date D (e.g. July 4, 2005), so that the result has is a datetime 
+with date D and the time T (July 4, 2005 at 17:30).
+
+> mergeDateAndTime = LocalTime
+
+* Given two datetimes T1, T2, how do I determine if they are on the same 
+date?
+
+> sameDay (LocalTime d1 _) (LocalTime d2 _) = d1 == d2
+
+
+From Simon Marlow:
+<http://www.haskell.org/pipermail/libraries/2005-July/004066.html>
+
+I just had a little look around, mainly at System.Time.Calendar.  I
+think the structure is rather complicated - I wanted to find out how to
+get a CalendarTime for "this time tomorrow", and ended up with this:
+
+*System.Time.Calendar> let c' =
+c{ztTime=zttime{dtDay=dtday{gregDay=day+1}}} where { zttime = ztTime c;
+dtday = dtDay zttime; day = gregDay dtday }
+
+> thisTimeTomorrow (ZonedTime (LocalTime day tod) zone) = (ZonedTime (LocalTime (addDays 1 day) tod) zone)
+
+
diff --git a/configure b/configure
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.67 for Haskell time package 1.3.
+# Generated by GNU Autoconf 2.68 for Haskell time package 1.4.0.2.
 #
 # Report bugs to <ashley@semantic.org>.
 #
@@ -91,6 +91,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -216,11 +217,18 @@
   # We cannot yet assume a decent shell, so we have to provide a
 	# neutralization value for shells without unset; and this also
 	# works around shells that cannot unset nonexistent variables.
+	# Preserve -v and -x to the replacement shell.
 	BASH_ENV=/dev/null
 	ENV=/dev/null
 	(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
 	export CONFIG_SHELL
-	exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+	case $- in # ((((
+	  *v*x* | *x*v* ) as_opts=-vx ;;
+	  *v* ) as_opts=-v ;;
+	  *x* ) as_opts=-x ;;
+	  * ) as_opts= ;;
+	esac
+	exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"}
 fi
 
     if test x$as_have_required = xno; then :
@@ -552,8 +560,8 @@
 # Identity of this package.
 PACKAGE_NAME='Haskell time package'
 PACKAGE_TARNAME='time'
-PACKAGE_VERSION='1.3'
-PACKAGE_STRING='Haskell time package 1.3'
+PACKAGE_VERSION='1.4.0.2'
+PACKAGE_STRING='Haskell time package 1.4.0.2'
 PACKAGE_BUGREPORT='ashley@semantic.org'
 PACKAGE_URL=''
 
@@ -648,6 +656,8 @@
 ac_user_opts='
 enable_option_checking
 with_cc
+with_gcc
+with_compiler
 '
       ac_precious_vars='build_alias
 host_alias
@@ -1062,7 +1072,7 @@
     $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
     expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
       $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
     ;;
 
   esac
@@ -1200,7 +1210,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures Haskell time package 1.3 to adapt to many kinds of systems.
+\`configure' configures Haskell time package 1.4.0.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1261,7 +1271,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of Haskell time package 1.3:";;
+     short | recursive ) echo "Configuration of Haskell time package 1.4.0.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1269,6 +1279,8 @@
   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
 C compiler
+Gnu C compiler
+Haskell compiler
 
 Some influential environment variables:
   CC          C compiler command
@@ -1346,8 +1358,8 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-Haskell time package configure 1.3
-generated by GNU Autoconf 2.67
+Haskell time package configure 1.4.0.2
+generated by GNU Autoconf 2.68
 
 Copyright (C) 2010 Free Software Foundation, Inc.
 This configure script is free software; the Free Software Foundation
@@ -1393,7 +1405,7 @@
 
 	ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_compile
@@ -1430,7 +1442,7 @@
 
     ac_retval=1
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_cpp
@@ -1443,10 +1455,10 @@
 ac_fn_c_check_header_mongrel ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval "test \"\${$3+set}\"" = set; then :
+  if eval \${$3+:} false; then :
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 fi
 eval ac_res=\$$3
@@ -1513,7 +1525,7 @@
 esac
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   eval "$3=\$ac_header_compiler"
@@ -1522,7 +1534,7 @@
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
 fi
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_mongrel
 
@@ -1563,7 +1575,7 @@
        ac_retval=$ac_status
 fi
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_run
@@ -1577,7 +1589,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1595,7 +1607,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_header_compile
 
@@ -1640,7 +1652,7 @@
   # interfere with the next link command; also delete a directory that is
   # left behind by Apple's compiler.  We do this before executing the actions.
   rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
   as_fn_set_status $ac_retval
 
 } # ac_fn_c_try_link
@@ -1653,7 +1665,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
 $as_echo_n "checking for $2... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1708,7 +1720,7 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_func
 
@@ -1721,7 +1733,7 @@
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2.$3" >&5
 $as_echo_n "checking for $2.$3... " >&6; }
-if eval "test \"\${$4+set}\"" = set; then :
+if eval \${$4+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1765,7 +1777,7 @@
 eval ac_res=\$$4
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_member
 
@@ -1780,7 +1792,7 @@
   as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
 $as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval "test \"\${$3+set}\"" = set; then :
+if eval \${$3+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -1811,15 +1823,15 @@
 eval ac_res=\$$3
 	       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
 $as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
 
 } # ac_fn_c_check_decl
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by Haskell time package $as_me 1.3, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+It was created by Haskell time package $as_me 1.4.0.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   $ $0 $@
 
@@ -2077,7 +2089,7 @@
       || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
   fi
 done
 
@@ -2176,6 +2188,18 @@
   withval=$with_cc; CC=$withval
 fi
 
+
+# Check whether --with-gcc was given.
+if test "${with_gcc+set}" = set; then :
+  withval=$with_gcc;
+fi
+
+
+# Check whether --with-compiler was given.
+if test "${with_compiler+set}" = set; then :
+  withval=$with_compiler;
+fi
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -2186,7 +2210,7 @@
 set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2226,7 +2250,7 @@
 set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2279,7 +2303,7 @@
 set dummy ${ac_tool_prefix}cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2319,7 +2343,7 @@
 set dummy cc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2378,7 +2402,7 @@
 set dummy $ac_tool_prefix$ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
+if ${ac_cv_prog_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$CC"; then
@@ -2422,7 +2446,7 @@
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -n "$ac_ct_CC"; then
@@ -2477,7 +2501,7 @@
 test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 
 # Provide some information about the compiler.
 $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
@@ -2592,7 +2616,7 @@
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
 $as_echo "yes" >&6; }
@@ -2635,7 +2659,7 @@
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest conftest$ac_cv_exeext
 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
@@ -2694,7 +2718,7 @@
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot run C compiled programs.
 If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
     fi
   fi
 fi
@@ -2705,7 +2729,7 @@
 ac_clean_files=$ac_clean_files_save
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
 $as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
+if ${ac_cv_objext+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2746,7 +2770,7 @@
 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 rm -f conftest.$ac_cv_objext conftest.$ac_ext
 fi
@@ -2756,7 +2780,7 @@
 ac_objext=$OBJEXT
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
+if ${ac_cv_c_compiler_gnu+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -2793,7 +2817,7 @@
 ac_save_CFLAGS=$CFLAGS
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
 $as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
+if ${ac_cv_prog_cc_g+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_save_c_werror_flag=$ac_c_werror_flag
@@ -2871,7 +2895,7 @@
 fi
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
+if ${ac_cv_prog_cc_c89+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   ac_cv_prog_cc_c89=no
@@ -2983,7 +3007,7 @@
   CPP=
 fi
 if test -z "$CPP"; then
-  if test "${ac_cv_prog_CPP+set}" = set; then :
+  if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
       # Double quotes because CPP needs to be expanded
@@ -3099,7 +3123,7 @@
   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5 ; }
+See \`config.log' for more details" "$LINENO" 5; }
 fi
 
 ac_ext=c
@@ -3111,7 +3135,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
 $as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
+if ${ac_cv_path_GREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if test -z "$GREP"; then
@@ -3174,7 +3198,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
 $as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
@@ -3241,7 +3265,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
 $as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
+if ${ac_cv_header_stdc+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3371,7 +3395,7 @@
 for ac_header in time.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "time.h" "ac_cv_header_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_time_h" = x""yes; then :
+if test "x$ac_cv_header_time_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_TIME_H 1
 _ACEOF
@@ -3395,7 +3419,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5
 $as_echo_n "checking whether struct tm is in sys/time.h or time.h... " >&6; }
-if test "${ac_cv_struct_tm+set}" = set; then :
+if ${ac_cv_struct_tm+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3432,7 +3456,7 @@
 #include <$ac_cv_struct_tm>
 
 "
-if test "x$ac_cv_member_struct_tm_tm_zone" = x""yes; then :
+if test "x$ac_cv_member_struct_tm_tm_zone" = xyes; then :
 
 cat >>confdefs.h <<_ACEOF
 #define HAVE_STRUCT_TM_TM_ZONE 1
@@ -3448,7 +3472,7 @@
 else
   ac_fn_c_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h>
 "
-if test "x$ac_cv_have_decl_tzname" = x""yes; then :
+if test "x$ac_cv_have_decl_tzname" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
@@ -3460,7 +3484,7 @@
 
   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5
 $as_echo_n "checking for tzname... " >&6; }
-if test "${ac_cv_var_tzname+set}" = set; then :
+if ${ac_cv_var_tzname+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3498,7 +3522,7 @@
 
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
+if ${ac_cv_header_time+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -3534,7 +3558,7 @@
 for ac_header in sys/time.h
 do :
   ac_fn_c_check_header_mongrel "$LINENO" "sys/time.h" "ac_cv_header_sys_time_h" "$ac_includes_default"
-if test "x$ac_cv_header_sys_time_h" = x""yes; then :
+if test "x$ac_cv_header_sys_time_h" = xyes; then :
   cat >>confdefs.h <<_ACEOF
 #define HAVE_SYS_TIME_H 1
 _ACEOF
@@ -3554,7 +3578,7 @@
 # endif
 #endif
 "
-if test "x$ac_cv_have_decl_altzone" = x""yes; then :
+if test "x$ac_cv_have_decl_altzone" = xyes; then :
   ac_have_decl=1
 else
   ac_have_decl=0
@@ -3630,10 +3654,21 @@
      :end' >>confcache
 if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
   if test -w "$cache_file"; then
-    test "x$cache_file" != "x/dev/null" &&
+    if test "x$cache_file" != "x/dev/null"; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
 $as_echo "$as_me: updating cache $cache_file" >&6;}
-    cat confcache >$cache_file
+      if test ! -f "$cache_file" || test -h "$cache_file"; then
+	cat confcache >"$cache_file"
+      else
+        case $cache_file in #(
+        */* | ?:*)
+	  mv -f confcache "$cache_file"$$ &&
+	  mv -f "$cache_file"$$ "$cache_file" ;; #(
+        *)
+	  mv -f confcache "$cache_file" ;;
+	esac
+      fi
+    fi
   else
     { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
@@ -3665,7 +3700,7 @@
 
 
 
-: ${CONFIG_STATUS=./config.status}
+: "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
 ac_clean_files="$ac_clean_files $CONFIG_STATUS"
@@ -3766,6 +3801,7 @@
 IFS=" ""	$as_nl"
 
 # Find who we are.  Look in the path if we contain no directory separator.
+as_myself=
 case $0 in #((
   *[\\/]* ) as_myself=$0 ;;
   *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
@@ -4072,8 +4108,8 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by Haskell time package $as_me 1.3, which was
-generated by GNU Autoconf 2.67.  Invocation command line was
+This file was extended by Haskell time package $as_me 1.4.0.2, which was
+generated by GNU Autoconf 2.68.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_HEADERS  = $CONFIG_HEADERS
@@ -4125,8 +4161,8 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-Haskell time package config.status 1.3
-configured by $0, generated by GNU Autoconf 2.67,
+Haskell time package config.status 1.4.0.2
+configured by $0, generated by GNU Autoconf 2.68,
   with options \\"\$ac_cs_config\\"
 
 Copyright (C) 2010 Free Software Foundation, Inc.
@@ -4240,7 +4276,7 @@
   case $ac_config_target in
     "include/HsTimeConfig.h") CONFIG_HEADERS="$CONFIG_HEADERS include/HsTimeConfig.h" ;;
 
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;;
+  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
   esac
 done
 
@@ -4261,9 +4297,10 @@
 # after its creation but before its name has been assigned to `$tmp'.
 $debug ||
 {
-  tmp=
+  tmp= ac_tmp=
   trap 'exit_status=$?
-  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+  : "${ac_tmp:=$tmp}"
+  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
 ' 0
   trap 'as_fn_exit 1' 1 2 13 15
 }
@@ -4271,18 +4308,19 @@
 
 {
   tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -n "$tmp" && test -d "$tmp"
+  test -d "$tmp"
 }  ||
 {
   tmp=./conf$$-$RANDOM
   (umask 077 && mkdir "$tmp")
 } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
+ac_tmp=$tmp
 
 # Set up the scripts for CONFIG_HEADERS section.
 # No need to generate them if there are no CONFIG_HEADERS.
 # This happens for instance with `./config.status Makefile'.
 if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
+cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
 BEGIN {
 _ACEOF
 
@@ -4294,8 +4332,8 @@
 # handling of long lines.
 ac_delim='%!_!# '
 for ac_last_try in false false :; do
-  ac_t=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_t"; then
+  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
+  if test -z "$ac_tt"; then
     break
   elif $ac_last_try; then
     as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
@@ -4396,7 +4434,7 @@
   esac
   case $ac_mode$ac_tag in
   :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;;
+  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
   :[FH]-) ac_tag=-:-;;
   :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
   esac
@@ -4415,7 +4453,7 @@
     for ac_f
     do
       case $ac_f in
-      -) ac_f="$tmp/stdin";;
+      -) ac_f="$ac_tmp/stdin";;
       *) # Look for the file first in the build tree, then in the source tree
 	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
 	 # because $ac_f cannot contain `:'.
@@ -4424,7 +4462,7 @@
 	   [\\/$]*) false;;
 	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
 	   esac ||
-	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;;
+	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
       esac
       case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
       as_fn_append ac_file_inputs " '$ac_f'"
@@ -4450,8 +4488,8 @@
     esac
 
     case $ac_tag in
-    *:-:* | *:-) cat >"$tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5  ;;
+    *:-:* | *:-) cat >"$ac_tmp/stdin" \
+      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
     esac
     ;;
   esac
@@ -4524,20 +4562,20 @@
   if test x"$ac_file" != x-; then
     {
       $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
-    } >"$tmp/config.h" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
+    } >"$ac_tmp/config.h" \
       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
+    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
       { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
 $as_echo "$as_me: $ac_file is unchanged" >&6;}
     else
       rm -f "$ac_file"
-      mv "$tmp/config.h" "$ac_file" \
+      mv "$ac_tmp/config.h" "$ac_file" \
 	|| as_fn_error $? "could not create $ac_file" "$LINENO" 5
     fi
   else
     $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
+      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
  ;;
diff --git a/configure.ac b/configure.ac
--- a/configure.ac
+++ b/configure.ac
@@ -1,4 +1,4 @@
-AC_INIT([Haskell time package], [1.3], [ashley@semantic.org], [time])
+AC_INIT([Haskell time package], [1.4.0.2], [ashley@semantic.org], [time])
 
 # Safety check: Ensure that we are in the correct source directory.
 AC_CONFIG_SRCDIR([include/HsTime.h])
@@ -6,6 +6,8 @@
 AC_ARG_WITH([cc],
             [C compiler],
             [CC=$withval])
+AC_ARG_WITH([gcc],[Gnu C compiler])
+AC_ARG_WITH([compiler],[Haskell compiler])
 AC_PROG_CC()
 
 AC_CONFIG_HEADERS([include/HsTimeConfig.h])
diff --git a/include/HsTimeConfig.h b/include/HsTimeConfig.h
--- a/include/HsTimeConfig.h
+++ b/include/HsTimeConfig.h
@@ -66,7 +66,7 @@
 #define PACKAGE_NAME "Haskell time package"
 
 /* Define to the full name and version of this package. */
-#define PACKAGE_STRING "Haskell time package 1.3"
+#define PACKAGE_STRING "Haskell time package 1.4.0.2"
 
 /* Define to the one symbol short name of this package. */
 #define PACKAGE_TARNAME "time"
@@ -75,7 +75,7 @@
 #define PACKAGE_URL ""
 
 /* Define to the version of this package. */
-#define PACKAGE_VERSION "1.3"
+#define PACKAGE_VERSION "1.4.0.2"
 
 /* Define to 1 if you have the ANSI C header files. */
 #define STDC_HEADERS 1
diff --git a/test/AddDays.hs b/test/AddDays.hs
deleted file mode 100644
--- a/test/AddDays.hs
+++ /dev/null
@@ -1,41 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar
-
-days ::[Day]
-days =
-	[
-	fromGregorian 2005 2 28,
-	fromGregorian 2004 2 29,
-	fromGregorian 2004 1 31,
-	fromGregorian 2004 12 31,
-	fromGregorian 2005 7 1,
-	fromGregorian 2005 4 21,
-	fromGregorian 2005 6 30
-	]
-
-increments :: [Integer]
-increments = [-10,-4,-1,0,1,7,83]
-
-adders :: [(String,Integer -> Day -> Day)]
-adders =
-	[
-	("day",addDays),
-	("month (clip)",addGregorianMonthsClip),
-	("month (roll over)",addGregorianMonthsRollOver),
-	("year (clip)",addGregorianYearsClip),
-	("year (roll over)",addGregorianYearsRollOver)
-	]
-
-resultDays :: [String]
-resultDays = do
-	(aname,adder) <- adders
-	increment <- increments
-	day <- days
-	return ((showGregorian day) ++ " + " ++ (show increment) ++ " * " ++ aname ++ " = " ++ showGregorian (adder increment day))
-
-main :: IO ()
-main = do
-	mapM_ putStrLn resultDays
diff --git a/test/AddDays.ref b/test/AddDays.ref
deleted file mode 100644
--- a/test/AddDays.ref
+++ /dev/null
@@ -1,245 +0,0 @@
-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
diff --git a/test/ClipDates.hs b/test/ClipDates.hs
deleted file mode 100644
--- a/test/ClipDates.hs
+++ /dev/null
@@ -1,26 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.OrdinalDate
-import Data.Time.Calendar.WeekDate
-import Data.Time.Calendar
-import Control.Monad
-
-checkYearAndDay :: (Integer,Int) -> IO ()
-checkYearAndDay (y,d) = putStrLn ((show y) ++ "-" ++ (show d) ++ " = " ++ (showOrdinalDate (fromOrdinalDate y d)))
-
-checkGregorian :: (Integer,Int,Int) -> IO ()
-checkGregorian (y,m,d) = putStrLn ((show y) ++ "-" ++ (show m) ++ "-" ++ (show d) ++ " = " ++ (showGregorian (fromGregorian y m d)))
-
-checkISOWeekDay :: (Integer,Int,Int) -> IO ()
-checkISOWeekDay (y,w,d) = putStrLn ((show y) ++ "-W" ++ (show w) ++ "-" ++ (show d) ++ " = " ++ (showWeekDate (fromWeekDate y w d)))
-
-main :: IO ()
-main = do
-	putStrLn "YearAndDay"
-	mapM_ checkYearAndDay (liftM2 (,)  [1968,1969,1971] [-4,0,1,200,364,365,366,367,700])
-	putStrLn "Gregorian"
-	mapM_ checkGregorian  (liftM3 (,,) [1968,1969,1971] [-20,-1,0,1,2,12,13,17] [-7,-1,0,1,2,27,28,29,30,31,32,40])
-	putStrLn "ISOWeekDay"
-	mapM_ checkISOWeekDay (liftM3 (,,) [1968,1969,2004] [-20,-1,0,1,20,51,52,53,54] [-2,-1,0,1,4,6,7,8,9])
diff --git a/test/ClipDates.ref b/test/ClipDates.ref
deleted file mode 100644
--- a/test/ClipDates.ref
+++ /dev/null
@@ -1,561 +0,0 @@
-YearAndDay
-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
-Gregorian
-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
-ISOWeekDay
-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
diff --git a/test/ConvertBack.hs b/test/ConvertBack.hs
deleted file mode 100644
--- a/test/ConvertBack.hs
+++ /dev/null
@@ -1,36 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.OrdinalDate
-import Data.Time.Calendar.Julian
-import Data.Time.Calendar.WeekDate
-import Data.Time.Calendar
-
-checkDay :: (Show t) => (Day -> t) -> (t -> Day) -> (t -> Maybe Day) -> Day -> IO ()
-checkDay encodeDay decodeDay decodeDayValid day = do
-	let st = encodeDay day
-	let day' = decodeDay st
-	if day /= day'
-	 then putStrLn ((show day) ++ " -> " ++ (show st) ++ " -> " ++ (show day') ++ " (diff " ++ (show (diffDays day' day)) ++ ")")
-	 else return ()
-	let mday' = decodeDayValid st
-	if Just day /= mday'
-	 then putStrLn ((show day) ++ " -> " ++ (show st) ++ " -> " ++ (show mday'))
-	 else return ()
-		
-
-checkers :: [Day -> IO ()]
-checkers = [
-	checkDay toOrdinalDate (\(y,d) -> fromOrdinalDate y d) (\(y,d) -> fromOrdinalDateValid y d),
-	checkDay toWeekDate (\(y,w,d) -> fromWeekDate y w d) (\(y,w,d) -> fromWeekDateValid y w d),
-	checkDay toGregorian (\(y,m,d) -> fromGregorian y m d) (\(y,m,d) -> fromGregorianValid y m d),
-	checkDay toJulian (\(y,m,d) -> fromJulian y m d) (\(y,m,d) -> fromJulianValid y m d)
-	]
-
-days :: [Day]
-days = [ModifiedJulianDay 50000 .. ModifiedJulianDay 50200] ++
-	(fmap (\year -> (fromGregorian year 1 4)) [1980..2000])
-
-main :: IO ()
-main = mapM_ (\ch -> mapM_ ch days) checkers
diff --git a/test/CurrentTime.hs b/test/CurrentTime.hs
deleted file mode 100644
--- a/test/CurrentTime.hs
+++ /dev/null
@@ -1,13 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time
-
-main :: IO ()
-main = do
-	now <- getCurrentTime
-	putStrLn (show (utctDay now) ++ "," ++ show (utctDayTime now))
-	putStrLn (show (utcToZonedTime utc now :: ZonedTime))
-	myzone <- getCurrentTimeZone
-	putStrLn (show (utcToZonedTime myzone now :: ZonedTime))
diff --git a/test/LongWeekYears.hs b/test/LongWeekYears.hs
deleted file mode 100644
--- a/test/LongWeekYears.hs
+++ /dev/null
@@ -1,18 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.WeekDate
-import Data.Time.Calendar
-
-longYear :: Integer -> Bool
-longYear year = case toWeekDate (fromGregorian year 12 31) of
-	(_,53,_) -> True
-	_ -> False
-
-showLongYear :: Integer -> IO ()
-showLongYear year = putStrLn ((show year) ++ ": " ++ (if isLeapYear year then "L" else " ") ++ (if longYear year then "*" else " "))
-
-main :: IO ()
-main = do
-	mapM_ showLongYear [1901 .. 2050]
diff --git a/test/LongWeekYears.ref b/test/LongWeekYears.ref
deleted file mode 100644
--- a/test/LongWeekYears.ref
+++ /dev/null
@@ -1,150 +0,0 @@
-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:   
diff --git a/test/Makefile b/test/Makefile
deleted file mode 100644
--- a/test/Makefile
+++ /dev/null
@@ -1,105 +0,0 @@
-GHC = ghc
-GHCFLAGS = -package time -package QuickCheck-1.2.0.1
-
-default:
-	make CurrentTime.run ShowDST.run test
-
-TestMonthDay: TestMonthDay.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-ConvertBack: ConvertBack.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TestCalendars: TestCalendars.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TestTime: TestTime.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-LongWeekYears: LongWeekYears.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-ClipDates: ClipDates.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-AddDays: AddDays.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TestFormat: TestFormat.o TestFormatStuff.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TestFormatStuff.o: TestFormatStuff.c TestFormatStuff.h
-	gcc -o $@ -c $<
-
-TestParseDAT: TestParseDAT.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TestEaster: TestEaster.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-CurrentTime: CurrentTime.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-ShowDST: ShowDST.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TimeZone: TimeZone.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-TimeZone.ref: FORCE
-	date +%z > $@
-
-TestParseTime: TestParseTime.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-RealToFracBenchmark: RealToFracBenchmark.o
-	$(GHC) $(GHCFLAGS) $^ -o $@
-
-test:	\
-	TestMonthDay.diff	\
-	ConvertBack.diff0	\
-	TestCalendars.diff	\
-	TestTime.diff	\
-	LongWeekYears.diff	\
-	ClipDates.diff	\
-	AddDays.diff	\
-	TimeZone.diff	\
-	TestFormat.diff0	\
-	TestParseDAT.diff	\
-	TestEaster.diff	\
-	TestParseTime.run	\
-	UseCases.o	\
-	RealToFracBenchmark.run
-	@echo "Success!"
-
-clean:
-	rm -rf TestMonthDay ConvertBack TestCalendars TestTime LongWeekYears ClipDates	\
-	AddDays TestFormat TestParseDAT TestEaster CurrentTime ShowDST TimeZone TimeZone.ref TestParseTime RealToFracBenchmark \
-        *.out *.run *.o *.hi Makefile.bak
-
-%.diff: %.ref %.out
-	diff -u $^
-
-%.diff0: %.out
-	diff -u /dev/null $^
-
-%.out: %
-	./$< > $@
-
-%.run: %
-	./$<
-	touch $@
-
-%.hi: %.o
-	@:
-
-%.o: %.hs
-	$(GHC) $(GHCFLAGS) -c $< -o $@
-
-%.o: %.lhs
-	$(GHC) $(GHCFLAGS) -c $< -o $@
-
-FORCE:
-
-.SECONDARY:
-
diff --git a/test/RealToFracBenchmark.hs b/test/RealToFracBenchmark.hs
deleted file mode 100644
--- a/test/RealToFracBenchmark.hs
+++ /dev/null
@@ -1,22 +0,0 @@
-{- Contributed by Liyang HU <haskell.org@liyang.hu> -}
-module Main where
-
-import Prelude
-import Control.Applicative
-import Control.Monad
-import Control.DeepSeq
-import Data.Time
-import Data.Time.Clock.POSIX
-import System.Random
-
-main :: IO ()
-main = do
-    ts <- replicateM 100000 $ do
-        t <- posixSecondsToUTCTime . realToFrac <$>
-            ( (*) . fromInteger <$> randomRIO (-15*10^21, 15*10^21) <*>
-                randomIO :: IO Double ) :: IO UTCTime
-        rnf t `seq` return t
-    now <- getCurrentTime
-    print . sum $ map (diffUTCTime now) ts
-    print =<< flip diffUTCTime now <$> getCurrentTime
-
diff --git a/test/ShowDST.hs b/test/ShowDST.hs
deleted file mode 100644
--- a/test/ShowDST.hs
+++ /dev/null
@@ -1,43 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time
-
-monthBeginning :: TimeZone -> Integer -> Int -> UTCTime
-monthBeginning zone year month = localTimeToUTC zone
-	(LocalTime (fromGregorian year month 1) midnight)
-
-findTransition :: UTCTime -> UTCTime -> IO [(UTCTime,TimeZone,TimeZone)]
-findTransition a b = do
-	za <- getTimeZone a
-	zb <- getTimeZone b
-	if za == zb then return [] else do
-		let c = addUTCTime ((diffUTCTime b a) / 2) a
-		if a == c then return [(b,za,zb)] else do
-			tp <- findTransition a c
-			tq <- findTransition c b
-			return (tp ++ tq)
-
-showZoneTime :: TimeZone -> UTCTime -> String
-showZoneTime zone time = show (utcToZonedTime zone time)
-
-showTransition :: (UTCTime,TimeZone,TimeZone) -> String
-showTransition (time,zone1,zone2) = (showZoneTime zone1 time) ++ " => " ++ (showZoneTime zone2 time)
-
-main :: IO ()
-main = do
-	now <- getCurrentTime
-	zone <- getTimeZone now
-	let (year,_,_) = toGregorian (localDay (utcToLocalTime zone now))
-	putStrLn ("DST adjustments for " ++ show year ++ ":")
-	let t0 = monthBeginning zone year 1
-	let t1 = monthBeginning zone year 4
-	let t2 = monthBeginning zone year 7
-	let t3 = monthBeginning zone year 10
-	let t4 = monthBeginning zone (year + 1) 1
-	tr1 <- findTransition t0 t1
-	tr2 <- findTransition t1 t2
-	tr3 <- findTransition t2 t3
-	tr4 <- findTransition t3 t4
-	mapM_ (putStrLn . showTransition) (tr1 ++ tr2 ++ tr3 ++ tr4)
diff --git a/test/TestCalendars.hs b/test/TestCalendars.hs
deleted file mode 100644
--- a/test/TestCalendars.hs
+++ /dev/null
@@ -1,29 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.Julian
-import Data.Time.Calendar.WeekDate
-import Data.Time.Calendar
-
-showers :: [(String,Day -> String)]
-showers = [
-	("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
-	]
-
-main :: IO ()
-main = mapM_ (\day -> do
-	mapM_ (\(name,shower) -> putStr  (" == " ++ name ++ " " ++ (shower day))) showers
-	putStrLn ""
-	) days
diff --git a/test/TestCalendars.ref b/test/TestCalendars.ref
deleted file mode 100644
--- a/test/TestCalendars.ref
+++ /dev/null
@@ -1,4 +0,0 @@
- == 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
diff --git a/test/TestEaster.hs b/test/TestEaster.hs
deleted file mode 100644
--- a/test/TestEaster.hs
+++ /dev/null
@@ -1,23 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.Easter
-import Data.Time.Calendar
-import Data.Time.Format
-
-import System.Locale
-
-days :: [Day]
-days = [ModifiedJulianDay 53000 .. ModifiedJulianDay 53014]
-
-showWithWDay :: Day -> String
-showWithWDay = formatTime defaultTimeLocale "%F %A"
-
-main :: IO ()
-main = do
-	mapM_ (\day -> putStrLn ((showWithWDay day) ++ " -> " ++ (showWithWDay (sundayAfter day)))) days
-	mapM_ (\year -> do
-		putStrLn ((show year) ++ ", Gregorian: moon, " ++ (show (gregorianPaschalMoon year)) ++ ": Easter, " ++ (showWithWDay (gregorianEaster year)))
-		putStrLn ((show year) ++ ", Orthodox : moon, " ++ (show (orthodoxPaschalMoon year)) ++ ": Easter, " ++ (showWithWDay (orthodoxEaster year)))
-		) [2000..2020]
diff --git a/test/TestEaster.ref b/test/TestEaster.ref
deleted file mode 100644
--- a/test/TestEaster.ref
+++ /dev/null
@@ -1,57 +0,0 @@
-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
diff --git a/test/TestFormat.hs b/test/TestFormat.hs
deleted file mode 100644
--- a/test/TestFormat.hs
+++ /dev/null
@@ -1,159 +0,0 @@
-{-# OPTIONS -XForeignFunctionInterface -Wall -Werror #-}
-
-module Main where
-
-import Data.Time
-import Data.Time.Clock.POSIX
-import Data.Char
-
-import System.Locale
-import Foreign
-import Foreign.C
-import Control.Exception;
-
-{-
-	size_t format_time (
-	char *s, size_t maxsize,
-	const char *format,
-	int isdst,int gmtoff,time_t t);
--}
-
-foreign import ccall unsafe "TestFormatStuff.h format_time" format_time :: CString -> CSize -> CString -> CInt -> CInt -> CString -> CTime -> IO CSize
-
-withBuffer :: Int -> (CString -> IO CSize) -> IO String
-withBuffer n f = withArray (replicate n 0) (\buffer -> do
-			len <- f buffer
-			peekCStringLen (buffer,fromIntegral len)
-		)
-
-unixFormatTime :: String -> TimeZone -> UTCTime -> IO String
-unixFormatTime fmt zone time = withCString fmt (\pfmt -> withCString (timeZoneName zone) (\pzonename ->
-		withBuffer 100 (\buffer -> format_time buffer 100 pfmt
-				(if timeZoneSummerOnly zone then 1 else 0)
-				(fromIntegral (timeZoneMinutes zone * 60))
-				pzonename
-				(fromInteger (truncate (utcTimeToPOSIXSeconds time)))
-			)
-		))
-
-locale :: TimeLocale
-locale = defaultTimeLocale {dateTimeFmt = "%a %b %e %H:%M:%S %Y"}
-
-zones :: [TimeZone]
-zones = [utc,TimeZone 87 True "Fenwickian Daylight Time"]
-
-baseTime0 :: UTCTime
-baseTime0 = localTimeToUTC utc (LocalTime (fromGregorian 1970 01 01) midnight)
-
-baseTime1 :: UTCTime
-baseTime1 = localTimeToUTC utc (LocalTime (fromGregorian 2000 01 01) midnight)
-
-getDay :: Integer -> UTCTime
-getDay day = addUTCTime ((fromInteger day) * posixDayLength) baseTime1
-
-getYearP1 :: Integer -> UTCTime
-getYearP1 year = localTimeToUTC utc (LocalTime (fromGregorian year 01 01) midnight)
-
-getYearP2 :: Integer -> UTCTime
-getYearP2 year = localTimeToUTC utc (LocalTime (fromGregorian year 02 04) midnight)
-
-getYearP3 :: Integer -> UTCTime
-getYearP3 year = localTimeToUTC utc (LocalTime (fromGregorian year 03 04) midnight)
-
-getYearP4 :: Integer -> UTCTime
-getYearP4 year = localTimeToUTC utc (LocalTime (fromGregorian year 12 31) midnight)
-
-times :: [UTCTime]
-times = [baseTime0] ++ (fmap getDay [0..23]) ++ (fmap getDay [0..100]) ++
-	(fmap getYearP1 [1980..2000]) ++ (fmap getYearP2 [1980..2000]) ++ (fmap getYearP3 [1980..2000]) ++ (fmap getYearP4 [1980..2000])
-
-compareFormat :: (String -> String) -> String -> TimeZone -> UTCTime -> IO ()
-compareFormat modUnix fmt zone time = let
-		ctime = utcToZonedTime zone time
-		haskellText = formatTime locale fmt ctime
-	in do
-		unixText <- fmap modUnix (unixFormatTime fmt zone time)
-		if haskellText == unixText then return () else
-			putStrLn ("Mismatch with " ++ fmt ++ " for " ++ (show ctime) ++ ": UNIX=\"" ++ unixText ++ "\", TimeLib=\"" ++ haskellText ++ "\".")
-
--- as found in http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
--- plus FgGklz
--- P not always supported
--- s time-zone dependent
-chars :: [Char]
-chars = "aAbBcCdDeFgGhHIjklmMnprRStTuUVwWxXyYzZ%"
-
--- as found in "man strftime" on a glibc system. '#' is different, though
-modifiers :: [Char]
-modifiers = "_-0^"
-
-formats :: [String]
-formats =  ["%G-W%V-%u","%U-%w","%W-%u"] ++ (fmap (\char -> '%':char:[]) chars)
- ++ (concat (fmap (\char -> fmap (\modifier -> '%':modifier:char:[]) modifiers) chars))
-
-hashformats :: [String]
-hashformats =  (fmap (\char -> '%':'#':char:[]) chars)
-
-somestrings :: [String]
-somestrings = ["", " ", "-", "\n"]
-
-getBottom :: a -> IO (Maybe Control.Exception.SomeException);
-getBottom a = Control.Exception.catch (seq a (return Nothing)) (return . Just);    
-
-safeString :: String -> IO String
-safeString s = do
- msx <- getBottom s
- case msx of
-  Just sx -> return (show sx)
-  Nothing -> case s of
-   (c:cc) -> do
-    mcx <- getBottom c
-    case mcx of
-     Just cx -> return (show cx)
-     Nothing -> do
-      ss <- safeString cc
-      return (c:ss)
-   [] -> return ""
-
-compareExpected :: (Eq t,Show t,ParseTime t) => String -> String -> String -> Maybe t -> IO ()
-compareExpected ts fmt str expected = let
- found = parseTime defaultTimeLocale fmt str
- in do
-  mex <- getBottom found
-  case mex of
-   Just ex -> putStrLn ("Exception with " ++ fmt ++ " for " ++ ts ++" " ++ (show str) ++ ": expected " ++ (show expected) ++ ", caught " ++ (show ex))
-   Nothing -> if found == expected
-    then return ()
-    else do
-     sf <- safeString (show found)
-     putStrLn ("Mismatch with " ++ fmt ++ " for " ++ ts ++" " ++ (show str) ++ ": expected " ++ (show expected) ++ ", found " ++ sf)
-
-class (ParseTime t) => TestParse t where
-    expectedParse :: String -> String -> Maybe t
-    expectedParse "%Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
-    expectedParse "%_Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
-    expectedParse "%-Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
-    expectedParse "%0Z" str | all isSpace str = Just (buildTime defaultTimeLocale [])
-    expectedParse _ _ = Nothing
-
-instance TestParse Day
-instance TestParse TimeOfDay
-instance TestParse LocalTime
-instance TestParse TimeZone
-instance TestParse ZonedTime
-instance TestParse UTCTime
-
-checkParse :: String -> String -> IO ()
-checkParse fmt str = do
- compareExpected "Day" fmt str (expectedParse fmt str :: Maybe Day)
- compareExpected "TimeOfDay" fmt str (expectedParse fmt str :: Maybe TimeOfDay)
- compareExpected "LocalTime" fmt str (expectedParse fmt str :: Maybe LocalTime)
- compareExpected "TimeZone" fmt str (expectedParse fmt str :: Maybe TimeZone)
- compareExpected "UTCTime" fmt str (expectedParse fmt str :: Maybe UTCTime)
-
-main :: IO ()
-main = do
-	mapM_ (\fmt -> mapM_ (checkParse fmt) somestrings) formats
-	mapM_ (\fmt -> mapM_ (\time -> mapM_ (\zone -> compareFormat id fmt zone time) zones) times) formats
-	mapM_ (\fmt -> mapM_ (\time -> mapM_ (\zone -> compareFormat (fmap toLower) fmt zone time) zones) times) hashformats
-
diff --git a/test/TestFormatStuff.c b/test/TestFormatStuff.c
deleted file mode 100644
--- a/test/TestFormatStuff.c
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "TestFormatStuff.h"
-
-size_t format_time (
-	char* buffer, size_t maxsize,
-	const char* format,
-	int isdst,int gmtoff,char* zonename,time_t t)
-{
-	t += gmtoff;
-	struct tm tmd;
-	gmtime_r(&t,&tmd);
-	tmd.tm_isdst = isdst;
-	tmd.tm_gmtoff = gmtoff;
-	tmd.tm_zone = zonename;
-	return strftime(buffer,maxsize,format,&tmd);
-}
diff --git a/test/TestFormatStuff.h b/test/TestFormatStuff.h
deleted file mode 100644
--- a/test/TestFormatStuff.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <time.h>
-
-size_t format_time (
-	char *s, size_t maxsize,
-	const char *format,
-	int isdst,int gmtoff,char* zonename,time_t t);
diff --git a/test/TestMonthDay.hs b/test/TestMonthDay.hs
deleted file mode 100644
--- a/test/TestMonthDay.hs
+++ /dev/null
@@ -1,20 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.MonthDay
-
-showCompare :: (Eq a,Show a) => a -> String -> a -> String
-showCompare a1 b a2 | a1 == a2 = (show a1) ++ " == " ++ b
-showCompare a1 b a2 = "DIFF: " ++ (show a1) ++ " -> " ++ b ++ " -> " ++ (show a2)
-
-main :: IO ()
-main = mapM_ (\isLeap -> do
-	putStrLn (if isLeap then "Leap:" else "Regular:")
-	mapM_ (\yd -> do
-		let (m,d) = dayOfYearToMonthAndDay isLeap yd
-		let yd' = monthAndDayToDayOfYear isLeap m d
-		let mdtext = (show m) ++ "-" ++ (show d)
-		putStrLn (showCompare yd mdtext yd')
-		) [-2..369]
-	) [False,True]
diff --git a/test/TestMonthDay.ref b/test/TestMonthDay.ref
deleted file mode 100644
--- a/test/TestMonthDay.ref
+++ /dev/null
@@ -1,746 +0,0 @@
-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
diff --git a/test/TestParseDAT.hs b/test/TestParseDAT.hs
deleted file mode 100644
--- a/test/TestParseDAT.hs
+++ /dev/null
@@ -1,62 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time
-import Data.Time.Clock.TAI
-import System.IO
-
-hSafeGetContents :: Handle -> IO String
-hSafeGetContents h = do
-	eof <- hIsEOF h
-	if eof
-	 then return []
-	 else do
-		c <- hGetChar h
-		cs <- hSafeGetContents h
-		return (c:cs)
-
-tods :: [TimeOfDay]
-tods = [
-	TimeOfDay 0 0 0,
-	TimeOfDay 0 0 0.5,
-	TimeOfDay 0 0 1,
-	TimeOfDay 0 0 1.5,
-	TimeOfDay 0 0 2,
-	TimeOfDay 23 59 28,
-	TimeOfDay 23 59 28.5,
-	TimeOfDay 23 59 29,
-	TimeOfDay 23 59 29.5,
-	TimeOfDay 23 59 30,
-	TimeOfDay 23 59 30.5,
-	TimeOfDay 23 59 31,
-	TimeOfDay 23 59 31.5,
-	TimeOfDay 23 59 32,
-	TimeOfDay 23 59 59,
-	TimeOfDay 23 59 59.5,
-	TimeOfDay 23 59 60,
-	TimeOfDay 23 59 60.5
-	]
-
-times :: [LocalTime]
-times =
-	fmap (LocalTime (fromGregorian 1998 04 02)) tods ++
-	fmap (LocalTime (fromGregorian 1998 12 30)) tods ++
-	fmap (LocalTime (fromGregorian 1998 12 31)) tods ++
-	fmap (LocalTime (fromGregorian 1999 01 01)) tods ++
-	fmap (LocalTime (fromGregorian 1999 01 02)) tods
-
-main :: IO ()
-main = do
-	h <- openFile "tai-utc.dat" ReadMode
-	s <- hSafeGetContents h
-	hClose h
-	let lst = parseTAIUTCDATFile s
-	mapM_ (\lt -> do
-		let utcTime = localTimeToUTC utc lt
-		let taiTime = utcToTAITime lst utcTime
-		let utcTime' = taiToUTCTime lst taiTime
-		if utcTime == utcTime'
-		 then putStrLn ((show utcTime) ++ " == " ++ (show taiTime))
-		 else putStrLn ("correction: " ++ (show utcTime) ++ " -> " ++ (show taiTime) ++ " -> " ++ (show utcTime'))
-		) times
diff --git a/test/TestParseDAT.ref b/test/TestParseDAT.ref
deleted file mode 100644
--- a/test/TestParseDAT.ref
+++ /dev/null
@@ -1,90 +0,0 @@
-1998-04-02 00:00:00 UTC == 1998-04-02 00:00:31 TAI
-1998-04-02 00:00:00.5 UTC == 1998-04-02 00:00:31.5 TAI
-1998-04-02 00:00:01 UTC == 1998-04-02 00:00:32 TAI
-1998-04-02 00:00:01.5 UTC == 1998-04-02 00:00:32.5 TAI
-1998-04-02 00:00:02 UTC == 1998-04-02 00:00:33 TAI
-1998-04-02 23:59:28 UTC == 1998-04-02 23:59:59 TAI
-1998-04-02 23:59:28.5 UTC == 1998-04-02 23:59:59.5 TAI
-1998-04-02 23:59:29 UTC == 1998-04-03 00:00:00 TAI
-1998-04-02 23:59:29.5 UTC == 1998-04-03 00:00:00.5 TAI
-1998-04-02 23:59:30 UTC == 1998-04-03 00:00:01 TAI
-1998-04-02 23:59:30.5 UTC == 1998-04-03 00:00:01.5 TAI
-1998-04-02 23:59:31 UTC == 1998-04-03 00:00:02 TAI
-1998-04-02 23:59:31.5 UTC == 1998-04-03 00:00:02.5 TAI
-1998-04-02 23:59:32 UTC == 1998-04-03 00:00:03 TAI
-1998-04-02 23:59:59 UTC == 1998-04-03 00:00:30 TAI
-1998-04-02 23:59:59.5 UTC == 1998-04-03 00:00:30.5 TAI
-correction: 1998-04-02 23:59:60 UTC -> 1998-04-03 00:00:31 TAI -> 1998-04-03 00:00:00 UTC
-correction: 1998-04-02 23:59:60.5 UTC -> 1998-04-03 00:00:31.5 TAI -> 1998-04-03 00:00:00.5 UTC
-1998-12-30 00:00:00 UTC == 1998-12-30 00:00:31 TAI
-1998-12-30 00:00:00.5 UTC == 1998-12-30 00:00:31.5 TAI
-1998-12-30 00:00:01 UTC == 1998-12-30 00:00:32 TAI
-1998-12-30 00:00:01.5 UTC == 1998-12-30 00:00:32.5 TAI
-1998-12-30 00:00:02 UTC == 1998-12-30 00:00:33 TAI
-1998-12-30 23:59:28 UTC == 1998-12-30 23:59:59 TAI
-1998-12-30 23:59:28.5 UTC == 1998-12-30 23:59:59.5 TAI
-1998-12-30 23:59:29 UTC == 1998-12-31 00:00:00 TAI
-1998-12-30 23:59:29.5 UTC == 1998-12-31 00:00:00.5 TAI
-1998-12-30 23:59:30 UTC == 1998-12-31 00:00:01 TAI
-1998-12-30 23:59:30.5 UTC == 1998-12-31 00:00:01.5 TAI
-1998-12-30 23:59:31 UTC == 1998-12-31 00:00:02 TAI
-1998-12-30 23:59:31.5 UTC == 1998-12-31 00:00:02.5 TAI
-1998-12-30 23:59:32 UTC == 1998-12-31 00:00:03 TAI
-1998-12-30 23:59:59 UTC == 1998-12-31 00:00:30 TAI
-1998-12-30 23:59:59.5 UTC == 1998-12-31 00:00:30.5 TAI
-correction: 1998-12-30 23:59:60 UTC -> 1998-12-31 00:00:31 TAI -> 1998-12-31 00:00:00 UTC
-correction: 1998-12-30 23:59:60.5 UTC -> 1998-12-31 00:00:31.5 TAI -> 1998-12-31 00:00:00.5 UTC
-1998-12-31 00:00:00 UTC == 1998-12-31 00:00:31 TAI
-1998-12-31 00:00:00.5 UTC == 1998-12-31 00:00:31.5 TAI
-1998-12-31 00:00:01 UTC == 1998-12-31 00:00:32 TAI
-1998-12-31 00:00:01.5 UTC == 1998-12-31 00:00:32.5 TAI
-1998-12-31 00:00:02 UTC == 1998-12-31 00:00:33 TAI
-1998-12-31 23:59:28 UTC == 1998-12-31 23:59:59 TAI
-1998-12-31 23:59:28.5 UTC == 1998-12-31 23:59:59.5 TAI
-1998-12-31 23:59:29 UTC == 1999-01-01 00:00:00 TAI
-1998-12-31 23:59:29.5 UTC == 1999-01-01 00:00:00.5 TAI
-1998-12-31 23:59:30 UTC == 1999-01-01 00:00:01 TAI
-1998-12-31 23:59:30.5 UTC == 1999-01-01 00:00:01.5 TAI
-1998-12-31 23:59:31 UTC == 1999-01-01 00:00:02 TAI
-1998-12-31 23:59:31.5 UTC == 1999-01-01 00:00:02.5 TAI
-1998-12-31 23:59:32 UTC == 1999-01-01 00:00:03 TAI
-1998-12-31 23:59:59 UTC == 1999-01-01 00:00:30 TAI
-1998-12-31 23:59:59.5 UTC == 1999-01-01 00:00:30.5 TAI
-1998-12-31 23:59:60 UTC == 1999-01-01 00:00:31 TAI
-1998-12-31 23:59:60.5 UTC == 1999-01-01 00:00:31.5 TAI
-1999-01-01 00:00:00 UTC == 1999-01-01 00:00:32 TAI
-1999-01-01 00:00:00.5 UTC == 1999-01-01 00:00:32.5 TAI
-1999-01-01 00:00:01 UTC == 1999-01-01 00:00:33 TAI
-1999-01-01 00:00:01.5 UTC == 1999-01-01 00:00:33.5 TAI
-1999-01-01 00:00:02 UTC == 1999-01-01 00:00:34 TAI
-1999-01-01 23:59:28 UTC == 1999-01-02 00:00:00 TAI
-1999-01-01 23:59:28.5 UTC == 1999-01-02 00:00:00.5 TAI
-1999-01-01 23:59:29 UTC == 1999-01-02 00:00:01 TAI
-1999-01-01 23:59:29.5 UTC == 1999-01-02 00:00:01.5 TAI
-1999-01-01 23:59:30 UTC == 1999-01-02 00:00:02 TAI
-1999-01-01 23:59:30.5 UTC == 1999-01-02 00:00:02.5 TAI
-1999-01-01 23:59:31 UTC == 1999-01-02 00:00:03 TAI
-1999-01-01 23:59:31.5 UTC == 1999-01-02 00:00:03.5 TAI
-1999-01-01 23:59:32 UTC == 1999-01-02 00:00:04 TAI
-1999-01-01 23:59:59 UTC == 1999-01-02 00:00:31 TAI
-1999-01-01 23:59:59.5 UTC == 1999-01-02 00:00:31.5 TAI
-correction: 1999-01-01 23:59:60 UTC -> 1999-01-02 00:00:32 TAI -> 1999-01-02 00:00:00 UTC
-correction: 1999-01-01 23:59:60.5 UTC -> 1999-01-02 00:00:32.5 TAI -> 1999-01-02 00:00:00.5 UTC
-1999-01-02 00:00:00 UTC == 1999-01-02 00:00:32 TAI
-1999-01-02 00:00:00.5 UTC == 1999-01-02 00:00:32.5 TAI
-1999-01-02 00:00:01 UTC == 1999-01-02 00:00:33 TAI
-1999-01-02 00:00:01.5 UTC == 1999-01-02 00:00:33.5 TAI
-1999-01-02 00:00:02 UTC == 1999-01-02 00:00:34 TAI
-1999-01-02 23:59:28 UTC == 1999-01-03 00:00:00 TAI
-1999-01-02 23:59:28.5 UTC == 1999-01-03 00:00:00.5 TAI
-1999-01-02 23:59:29 UTC == 1999-01-03 00:00:01 TAI
-1999-01-02 23:59:29.5 UTC == 1999-01-03 00:00:01.5 TAI
-1999-01-02 23:59:30 UTC == 1999-01-03 00:00:02 TAI
-1999-01-02 23:59:30.5 UTC == 1999-01-03 00:00:02.5 TAI
-1999-01-02 23:59:31 UTC == 1999-01-03 00:00:03 TAI
-1999-01-02 23:59:31.5 UTC == 1999-01-03 00:00:03.5 TAI
-1999-01-02 23:59:32 UTC == 1999-01-03 00:00:04 TAI
-1999-01-02 23:59:59 UTC == 1999-01-03 00:00:31 TAI
-1999-01-02 23:59:59.5 UTC == 1999-01-03 00:00:31.5 TAI
-correction: 1999-01-02 23:59:60 UTC -> 1999-01-03 00:00:32 TAI -> 1999-01-03 00:00:00 UTC
-correction: 1999-01-02 23:59:60.5 UTC -> 1999-01-03 00:00:32.5 TAI -> 1999-01-03 00:00:00.5 UTC
diff --git a/test/TestParseTime.hs b/test/TestParseTime.hs
deleted file mode 100644
--- a/test/TestParseTime.hs
+++ /dev/null
@@ -1,437 +0,0 @@
-{-# OPTIONS -Wall -Werror -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}
-{-# LANGUAGE FlexibleInstances, ExistentialQuantification #-}
-
-import Control.Monad
-import Data.Char
-import Data.Ratio
-import Data.Maybe
-import Data.Time
-import Data.Time.Calendar.OrdinalDate
-import Data.Time.Calendar.WeekDate
-import Data.Time.Clock.POSIX
-import System.Locale
-import System.Exit
-import Test.QuickCheck
-import Test.QuickCheck.Batch
-
-
-class RunTest p where
-    runTest :: p -> IO TestResult
-
-instance RunTest (IO TestResult) where
-    runTest iob = iob
-
-instance RunTest Property where
-    runTest p = run p (TestOptions {no_of_tests = 10000,length_of_tests = 0,debug_tests = False})
-
-data ExhaustiveTest = forall t. (Show t) => MkExhaustiveTest [t] (t -> IO Bool)
-
-instance RunTest ExhaustiveTest where
-    runTest (MkExhaustiveTest cases f) = do
-        results <- mapM (\t -> do {b <- f t;return (b,show t)}) cases
-        let failures = mapMaybe (\(b,n) -> if b then Nothing else Just n) results
-        let fcount = length failures
-        return (if fcount == 0 then TestOk "OK" 0 [] else TestFailed failures fcount)
-
-ntest :: Int
-ntest = 1000
-
-main :: IO ()
-main = do
-    putStrLn "Should work:"
-    good1 <- checkAll extests
-    putStrLn "Should work:"
-    good2 <- checkAll properties
-    putStrLn "Known failures:"
-    _ <- checkAll knownFailures
-    exitWith (if good1 && good2 then ExitSuccess else ExitFailure 1)
-
-days2011 :: [Day]
-days2011 = [(fromGregorian 2011 1 1) .. (fromGregorian 2011 12 31)]
-
-extests :: [(String,ExhaustiveTest)]
-extests = [
-    ("parse %y",MkExhaustiveTest [0..99] parseYY),
-    ("parse %C %y 1900s",MkExhaustiveTest [0..99] (parseCYY 19)),
-    ("parse %C %y 2000s",MkExhaustiveTest [0..99] (parseCYY 20)),
-    ("parse %C %y 1400s",MkExhaustiveTest [0..99] (parseCYY 14)),
-    ("parse %C %y 700s",MkExhaustiveTest [0..99] (parseCYY 7)),
-    ("parse %Y%m%d",MkExhaustiveTest days2011 parseYMD),
-    ("parse %Y %m %d",MkExhaustiveTest days2011 parseYearDayD),
-    ("parse %Y %-m %e",MkExhaustiveTest days2011 parseYearDayE)
-    ]
-
-parseYMD :: Day -> IO Bool
-parseYMD day = case toGregorian day of
-    (y,m,d) -> return $ (parse "%Y%m%d" ((show y) ++ (show2 m) ++ (show2 d))) == Just day
-
-parseYearDayD :: Day -> IO Bool
-parseYearDayD day = case toGregorian day of
-    (y,m,d) -> return $ (parse "%Y %m %d" ((show y) ++ " " ++ (show2 m) ++ " " ++ (show2 d))) == Just day
-
-parseYearDayE :: Day -> IO Bool
-parseYearDayE day = case toGregorian day of
-    (y,m,d) -> return $ (parse "%Y %-m %e" ((show y) ++ " " ++ (show m) ++ " " ++ (show d))) == Just day
-
--- | 1969 - 2068
-expectedYear :: Integer -> Integer
-expectedYear i | i >= 69 = 1900 + i
-expectedYear i = 2000 + i
-
-show2 :: (Integral n) => n -> String
-show2 i = (show (div i 10)) ++ (show (mod i 10))
-
-parseYY :: Integer -> IO Bool
-parseYY i = return (parse "%y" (show2 i) == Just (fromGregorian (expectedYear i) 1 1))
-
-parseCYY :: Integer -> Integer -> IO Bool
-parseCYY c i = return (parse "%C %y" ((show2 c) ++ " " ++ (show2 i)) == Just (fromGregorian ((c * 100) + i) 1 1))
-
-checkAll :: RunTest p => [(String,p)] -> IO Bool
-checkAll ps = fmap and (mapM checkOne ps)
-
-trMessage :: TestResult -> String
-trMessage (TestOk s _ _) = s
-trMessage (TestExausted s i ss) = "Exhausted " ++ (show s) ++ " " ++ (show i) ++ " " ++ (show ss)
-trMessage (TestFailed ss i) = "Failed " ++ (show ss) ++ " " ++ (show i)
-trMessage (TestAborted ex) = "Aborted " ++ (show ex)
-
-trGood :: TestResult -> Bool
-trGood (TestOk _ _ _) = True
-trGood _ = False
-
-checkOne :: RunTest p => (String,p) -> IO Bool
-checkOne (n,p) =
-    do
-       putStr (rpad 65 ' ' n)
-       tr <- runTest p
-       putStrLn (trMessage tr)
-       return (trGood tr)
-  where
-    rpad n' c xs = xs ++ replicate (n' - length xs) c
-
-
-parse :: ParseTime t => String -> String -> Maybe t
-parse f t = parseTime defaultTimeLocale f t
-
-format :: (FormatTime t) => String -> t -> String
-format f t = formatTime defaultTimeLocale f t
-
-
-instance Arbitrary Day where
-    arbitrary = liftM ModifiedJulianDay $ choose (-313698, 2973483) -- 1000-01-1 to 9999-12-31
-    coarbitrary (ModifiedJulianDay d) = coarbitrary d
-
-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)
-              secondsToDiffTime' :: Integer -> DiffTime
-              secondsToDiffTime' = fromInteger
-              picosecondsToDiffTime' :: Integer -> DiffTime
-              picosecondsToDiffTime' x = fromRational (x % 10^12)
-    coarbitrary t = coarbitrary (fromEnum t)
-
-instance Arbitrary TimeOfDay where
-    arbitrary = liftM timeToTimeOfDay arbitrary
-    coarbitrary t = coarbitrary (timeOfDayToTime t)
-
-instance Arbitrary LocalTime where
-    arbitrary = liftM2 LocalTime arbitrary arbitrary
-    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (localTimeToUTC utc t)) :: Integer)
-
-instance Arbitrary TimeZone where
-    arbitrary = liftM minutesToTimeZone $ choose (-720,720)
-    coarbitrary tz = coarbitrary (timeZoneMinutes tz)
-
-instance Arbitrary ZonedTime where
-    arbitrary = liftM2 ZonedTime arbitrary arbitrary
-    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds (zonedTimeToUTC t)) :: Integer)
-
-instance Arbitrary UTCTime where
-    arbitrary = liftM2 UTCTime arbitrary arbitrary
-    coarbitrary t = coarbitrary (truncate (utcTimeToPOSIXSeconds t) :: Integer)
-
--- missing from the time package
-instance Eq ZonedTime where
-    ZonedTime t1 tz1 == ZonedTime t2 tz2 = t1 == t2 && tz1 == tz2
-
--- 
--- * tests for dbugging 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 f s `asTypeOf` Just t)
-
---
--- * show and read 
---
-
-prop_read_show :: (Read a, Show a, Eq a) => a -> Bool
-prop_read_show t = read (show t) == t
-
---
--- * special show functions
---
-
-prop_parse_showWeekDate :: Day -> Bool
-prop_parse_showWeekDate d = parse "%G-W%V-%u" (showWeekDate d) == Just d
-
-prop_parse_showGregorian :: Day -> Bool
-prop_parse_showGregorian d = parse "%Y-%m-%d" (showGregorian d) == Just d
-
-prop_parse_showOrdinalDate :: Day -> Bool
-prop_parse_showOrdinalDate d = parse "%Y-%j" (showOrdinalDate d) == Just d
-
---
--- * fromMondayStartWeek and fromSundayStartWeek
---
-
-prop_fromMondayStartWeek :: Day -> Bool
-prop_fromMondayStartWeek d = 
-    let (w,wd)  = mondayStartWeek d
-        (y,_,_) = toGregorian d
-     in fromMondayStartWeek y w wd == d
-
-prop_fromSundayStartWeek :: Day -> Bool
-prop_fromSundayStartWeek d = 
-    let (w,wd)  = sundayStartWeek d
-        (y,_,_) = toGregorian d
-     in fromSundayStartWeek y w wd == d
-
---
--- * format and parse 
---
-
--- | Helper for defining named properties.
-prop_named :: (Arbitrary t, Show t, Testable a)
-           => String -> (FormatString s -> t -> a) -> String -> FormatString s -> NamedProperty
-prop_named name prop typeName f = (name ++ " " ++ typeName ++ " " ++ show f, property (prop f))
-
-prop_parse_format :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
-prop_parse_format (FormatString f) t = parse f (format f t) == Just t
-
-prop_parse_format_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
-                           => String -> FormatString t -> NamedProperty
-prop_parse_format_named = prop_named "prop_parse_format" prop_parse_format
-
--- Verify case-insensitivity with upper case.
-prop_parse_format_upper :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
-prop_parse_format_upper (FormatString f) t = parse f (map toUpper $ format f t) == Just t
-
-prop_parse_format_upper_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
-                              => String -> FormatString t -> NamedProperty
-prop_parse_format_upper_named = prop_named "prop_parse_format_upper" prop_parse_format_upper
-
--- Verify case-insensitivity with lower case.
-prop_parse_format_lower :: (Eq t, FormatTime t, ParseTime t) => FormatString t -> t -> Bool
-prop_parse_format_lower (FormatString f) t = parse f (map toLower $ format f t) == Just t
-
-prop_parse_format_lower_named :: (Arbitrary t, Eq t, Show t, FormatTime t, ParseTime t) 
-                              => String -> FormatString t -> NamedProperty
-prop_parse_format_lower_named = prop_named "prop_parse_format_lower" prop_parse_format_lower
-
-prop_format_parse_format :: (FormatTime t, ParseTime t) => FormatString t -> t -> Bool
-prop_format_parse_format (FormatString f) t = 
-    fmap (format f) (parse f (format f t) `asTypeOf` Just t) == Just (format f t)
-
-prop_format_parse_format_named :: (Arbitrary t, Show t, FormatTime t, ParseTime t) 
-                                  => String -> FormatString t -> NamedProperty
-prop_format_parse_format_named = prop_named "prop_format_parse_format" prop_format_parse_format
-
---
--- * 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)
-    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 f s of
-      Nothing -> True
-      Just t  -> t == t `asTypeOf` formatType fs
-  where 
-prop_no_crash_bad_input_named :: (Eq t, ParseTime t)
-                                 => String -> FormatString t -> NamedProperty
-prop_no_crash_bad_input_named = prop_named "prop_no_crash_bad_input" prop_no_crash_bad_input
-
---
---
---
-
-newtype FormatString a = FormatString String
-
-formatType :: FormatString t -> t
-formatType _ = undefined
-
-castFormatString :: FormatString a -> FormatString b
-castFormatString (FormatString f) = FormatString f
-
-instance Show (FormatString a) where
-    show (FormatString f) = show f
-
-type NamedProperty = (String, Property)
-
-properties :: [NamedProperty]
-properties = 
-    [("prop_fromMondayStartWeek", property prop_fromMondayStartWeek),
-     ("prop_fromSundayStartWeek", property prop_fromSundayStartWeek)]
- ++ [("prop_read_show Day", property (prop_read_show :: Day -> Bool)),
-     ("prop_read_show TimeOfDay", property (prop_read_show :: TimeOfDay -> Bool)),
-     ("prop_read_show LocalTime", property (prop_read_show :: LocalTime -> Bool)),
-     ("prop_read_show TimeZone", property (prop_read_show :: TimeZone -> Bool)),
-     ("prop_read_show ZonedTime", property (prop_read_show :: ZonedTime -> Bool)),
-     ("prop_read_show UTCTime", property (prop_read_show :: UTCTime -> Bool))]
- ++ [("prop_parse_showWeekDate", property prop_parse_showWeekDate),
-     ("prop_parse_showGregorian", property prop_parse_showGregorian),
-     ("prop_parse_showOrdinalDate", property prop_parse_showOrdinalDate)]
-
- ++ map (prop_parse_format_named "Day") dayFormats
- ++ map (prop_parse_format_named "TimeOfDay") timeOfDayFormats
- ++ map (prop_parse_format_named "LocalTime") localTimeFormats
- ++ map (prop_parse_format_named "TimeZone") timeZoneFormats
- ++ map (prop_parse_format_named "ZonedTime") zonedTimeFormats
- ++ map (prop_parse_format_named "UTCTime") utcTimeFormats
-
- ++ map (prop_parse_format_upper_named "Day") dayFormats
- ++ map (prop_parse_format_upper_named "TimeOfDay") timeOfDayFormats
- ++ map (prop_parse_format_upper_named "LocalTime") localTimeFormats
- ++ map (prop_parse_format_upper_named "TimeZone") timeZoneFormats
- ++ map (prop_parse_format_upper_named "ZonedTime") zonedTimeFormats
- ++ map (prop_parse_format_upper_named "UTCTime") utcTimeFormats
-
- ++ map (prop_parse_format_lower_named "Day") dayFormats
- ++ map (prop_parse_format_lower_named "TimeOfDay") timeOfDayFormats
- ++ map (prop_parse_format_lower_named "LocalTime") localTimeFormats
- ++ map (prop_parse_format_lower_named "TimeZone") timeZoneFormats
- ++ map (prop_parse_format_lower_named "ZonedTime") zonedTimeFormats
- ++ map (prop_parse_format_lower_named "UTCTime") utcTimeFormats
-
- ++ map (prop_format_parse_format_named "Day") partialDayFormats
- ++ map (prop_format_parse_format_named "TimeOfDay") partialTimeOfDayFormats
- ++ map (prop_format_parse_format_named "LocalTime") partialLocalTimeFormats
- ++ map (prop_format_parse_format_named "ZonedTime") partialZonedTimeFormats
- ++ map (prop_format_parse_format_named "UTCTime") partialUTCTimeFormats
-
- ++ map (prop_no_crash_bad_input_named "Day") (dayFormats ++ partialDayFormats ++ failingPartialDayFormats)
- ++ map (prop_no_crash_bad_input_named "TimeOfDay") (timeOfDayFormats ++ partialTimeOfDayFormats)
- ++ map (prop_no_crash_bad_input_named "LocalTime") (localTimeFormats ++ partialLocalTimeFormats)
- ++ map (prop_no_crash_bad_input_named "TimeZone") (timeZoneFormats)
- ++ map (prop_no_crash_bad_input_named "ZonedTime") (zonedTimeFormats ++ partialZonedTimeFormats)
- ++ map (prop_no_crash_bad_input_named "UTCTime") (utcTimeFormats ++ partialUTCTimeFormats)
-
-
-
-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",
-     -- ordinal dates
-     "%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"
-    ]
-
-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 $ 
-  []
-{-
-  -- there's soo many of them...
-  concat [ [df ++ " " ++ tf, tf ++ " " ++ df] | FormatString df <- dayFormats, 
-                                                   FormatString tf <- timeOfDayFormats]
--}
-
-timeZoneFormats :: [FormatString TimeZone]
-timeZoneFormats = map FormatString ["%z","%z%Z","%Z%z","%Z"]
-
-zonedTimeFormats :: [FormatString ZonedTime]
-zonedTimeFormats = map FormatString
-  ["%a, %d %b %Y %H:%M:%S.%q %z", "%a, %d %b %Y %H:%M:%S%Q %z", "%s.%q %z", "%s%Q %z",
-   "%a, %d %b %Y %H:%M:%S.%q %Z", "%a, %d %b %Y %H:%M:%S%Q %Z", "%s.%q %Z", "%s%Q %Z"]
-
-utcTimeFormats :: [FormatString UTCTime]
-utcTimeFormats = map FormatString 
-  ["%s.%q","%s%Q"]
-
---
--- * Formats that do not include all the information
---
-
-partialDayFormats :: [FormatString Day]
-partialDayFormats = map FormatString
-    [ ]
-
-partialTimeOfDayFormats :: [FormatString TimeOfDay]
-partialTimeOfDayFormats = map FormatString
-    [ ]
-
-partialLocalTimeFormats :: [FormatString LocalTime]
-partialLocalTimeFormats = map FormatString 
-    [
-     -- %c does not include second decimals 
-     "%c" 
-    ]
-
-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"
-    ]
-
-
---
--- * Known failures
---
-
-knownFailures :: [NamedProperty]
-knownFailures =
-    map (prop_format_parse_format_named "Day") failingPartialDayFormats
-
-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"
-    ]
diff --git a/test/TestTime.hs b/test/TestTime.hs
deleted file mode 100644
--- a/test/TestTime.hs
+++ /dev/null
@@ -1,97 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time.Calendar.OrdinalDate
-import Data.Time.Calendar.WeekDate
-import Data.Time
-
-showCal :: Integer -> IO ()
-showCal mjd = do
-	let date = ModifiedJulianDay mjd
-	let (y,m,d) = toGregorian date
-	let date' = fromGregorian y m d
-	putStr ((show mjd) ++ "=" ++ (showGregorian date) ++ "=" ++ (showOrdinalDate date) ++ "=" ++ (showWeekDate date))
-	putStrLn (if date == date' then "" else "=" ++ (show (toModifiedJulianDay date')) ++ "!")
-
-testCal :: IO ()
-testCal = do
-	-- days around 1 BCE/1 CE
-	mapM_ showCal [-678950 .. -678930]	
-	-- days around 1000 CE
-	mapM_ showCal [-313710 .. -313690]	
-	-- days around MJD zero
-	mapM_ 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
-	mapM_ showCal [51540..52280]	
-
-showUTCTime :: UTCTime -> String
-showUTCTime (UTCTime d t) =  show (toModifiedJulianDay d) ++ "," ++ show t
-
-myzone :: TimeZone
-myzone = hoursToTimeZone (- 8)
-
-leapSec1998Cal :: LocalTime
-leapSec1998Cal = LocalTime (fromGregorian 1998 12 31) (TimeOfDay 23 59 60.5)
-
-leapSec1998 :: UTCTime
-leapSec1998 = localTimeToUTC utc leapSec1998Cal
-
-testUTC :: IO ()
-testUTC = do
-	putStrLn ""
-	showCal 51178
-	putStrLn (show leapSec1998Cal)
-	putStrLn (showUTCTime leapSec1998)
-	let lsMineCal = utcToLocalTime myzone leapSec1998
-	putStrLn (show lsMineCal)
-	let lsMine = localTimeToUTC myzone lsMineCal
-	putStrLn (showUTCTime lsMine)
-
-neglong :: Rational
-neglong = -120
-
-poslong :: Rational
-poslong = 120
-
-testUT1 :: IO ()
-testUT1 = do
-	putStrLn ""
-	putStrLn (show (ut1ToLocalTime 0 (ModJulianDate 51604.0)))
-	putStrLn (show (ut1ToLocalTime 0 (ModJulianDate 51604.5)))
-	putStrLn (show (ut1ToLocalTime neglong (ModJulianDate 51604.0)))
-	putStrLn (show (ut1ToLocalTime neglong (ModJulianDate 51604.5)))
-	putStrLn (show (ut1ToLocalTime poslong (ModJulianDate 51604.0)))
-	putStrLn (show (ut1ToLocalTime poslong (ModJulianDate 51604.5)))
-
-testTimeOfDayToDayFraction :: IO ()
-testTimeOfDayToDayFraction = do
-	putStrLn ""
-	let f = dayFractionToTimeOfDay . timeOfDayToDayFraction
-	putStrLn (show (f (TimeOfDay 12 34 56.789)))
-	putStrLn (show (f (TimeOfDay 12 34 56.789123)))
-	putStrLn (show (f (TimeOfDay 12 34 56.789123456)))
-	putStrLn (show (f (TimeOfDay 12 34 56.789123456789)))
-
-main :: IO ()
-main = do
-	testCal
-	testUTC
-	testUT1
-	testTimeOfDayToDayFraction
diff --git a/test/TestTime.ref b/test/TestTime.ref
deleted file mode 100644
--- a/test/TestTime.ref
+++ /dev/null
@@ -1,874 +0,0 @@
--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
diff --git a/test/TimeZone.hs b/test/TimeZone.hs
deleted file mode 100644
--- a/test/TimeZone.hs
+++ /dev/null
@@ -1,10 +0,0 @@
-{-# OPTIONS -Wall -Werror #-}
-
-module Main where
-
-import Data.Time
-
-main :: IO ()
-main = do
-	zone <- getCurrentTimeZone
-	putStrLn (timeZoneOffsetString zone)
diff --git a/test/UseCases.lhs b/test/UseCases.lhs
deleted file mode 100644
--- a/test/UseCases.lhs
+++ /dev/null
@@ -1,83 +0,0 @@
-> module UseCases where
-> import Data.Time.Calendar.OrdinalDate
-> import Data.Time
-> import System.Locale
-
-
-From Brian Smith:
-<http://www.haskell.org/pipermail/libraries/2005-July/004060.html>
-
-Use cases (primarily taken from real-world corporate IT applications I have 
-developed) :
-
-* What is the equivalent (or closest aproximation) of the SQL DateTime type 
-(date and time without any timezone information)? What is the equivalent of 
-the SQL Date type (date without any timezone information)?
-
-> type SQLDateTime = LocalTime
-> type SQLDate = Day
-
-* The user enters a date as "7/4/2005." How do I determine if this date is 
-before or after July 1st of this year?
-
-TODO: Parsing
-
-* How do I present the date "July 1st of this year" to the user in M/D/YYYY 
-format?
-
-> july1st = do
->    now <- getZonedTime
->    let (thisYear,_,_) = toGregorian (localDay (zonedTimeToLocalTime now))
->    let day = fromGregorian thisYear 7 1
->    return (formatTime defaultTimeLocale "%m/%d/%Y" day)
-
-This actually gives "07/01/2005" rather than "7/1/2005".
-ISSUE: Should I make additional %-codes for this?
-
-
-* How do I truncate a datetime to midnight of the same day? How do I 
-truncate a date to the first of the month? How do I truncate a date to the 
-first day of the year it occurred in?
-
-> truncateToMidnight (LocalTime day _) = (LocalTime day midnight)
-
-> truncateToFirstOfMonth day = fromGregorian y m 1 where
->    (y,m,_) = toGregorian day
-
-> truncateToJan1st day = fromOrdinalDate y 1 where
->    (y,_) = toOrdinalDate day
-
-* Given a date X, how do I find the last day of the month that X occurs in. 
-For example, If X is July 4th, 2005, then I want the result to be July 31st, 
-2005. If X is Februrary 5, then I want the result to be Februrary 28 for 
-non-leap-years and February 29 for leap years.
-
-> lastDayOfMonth day = fromGregorian y m (gregorianMonthLength y m) where
->    (y,m,_) = toGregorian day
-
-* The user enters a time T with no date, e.g. "17:30". How do I merge this 
-time onto a date D (e.g. July 4, 2005), so that the result has is a datetime 
-with date D and the time T (July 4, 2005 at 17:30).
-
-> mergeDateAndTime = LocalTime
-
-* Given two datetimes T1, T2, how do I determine if they are on the same 
-date?
-
-> sameDay (LocalTime d1 _) (LocalTime d2 _) = d1 == d2
-
-
-From Simon Marlow:
-<http://www.haskell.org/pipermail/libraries/2005-July/004066.html>
-
-I just had a little look around, mainly at System.Time.Calendar.  I
-think the structure is rather complicated - I wanted to find out how to
-get a CalendarTime for "this time tomorrow", and ended up with this:
-
-*System.Time.Calendar> let c' =
-c{ztTime=zttime{dtDay=dtday{gregDay=day+1}}} where { zttime = ztTime c;
-dtday = dtDay zttime; day = gregDay dtday }
-
-> thisTimeTomorrow (ZonedTime (LocalTime day tod) zone) = (ZonedTime (LocalTime (addDays 1 day) tod) zone)
-
-
diff --git a/test/tai-utc.dat b/test/tai-utc.dat
deleted file mode 100644
--- a/test/tai-utc.dat
+++ /dev/null
@@ -1,37 +0,0 @@
- 1961 JAN  1 =JD 2437300.5  TAI-UTC=   1.4228180 S + (MJD - 37300.) X 0.001296 S
- 1961 AUG  1 =JD 2437512.5  TAI-UTC=   1.3728180 S + (MJD - 37300.) X 0.001296 S
- 1962 JAN  1 =JD 2437665.5  TAI-UTC=   1.8458580 S + (MJD - 37665.) X 0.0011232S
- 1963 NOV  1 =JD 2438334.5  TAI-UTC=   1.9458580 S + (MJD - 37665.) X 0.0011232S
- 1964 JAN  1 =JD 2438395.5  TAI-UTC=   3.2401300 S + (MJD - 38761.) X 0.001296 S
- 1964 APR  1 =JD 2438486.5  TAI-UTC=   3.3401300 S + (MJD - 38761.) X 0.001296 S
- 1964 SEP  1 =JD 2438639.5  TAI-UTC=   3.4401300 S + (MJD - 38761.) X 0.001296 S
- 1965 JAN  1 =JD 2438761.5  TAI-UTC=   3.5401300 S + (MJD - 38761.) X 0.001296 S
- 1965 MAR  1 =JD 2438820.5  TAI-UTC=   3.6401300 S + (MJD - 38761.) X 0.001296 S
- 1965 JUL  1 =JD 2438942.5  TAI-UTC=   3.7401300 S + (MJD - 38761.) X 0.001296 S
- 1965 SEP  1 =JD 2439004.5  TAI-UTC=   3.8401300 S + (MJD - 38761.) X 0.001296 S
- 1966 JAN  1 =JD 2439126.5  TAI-UTC=   4.3131700 S + (MJD - 39126.) X 0.002592 S
- 1968 FEB  1 =JD 2439887.5  TAI-UTC=   4.2131700 S + (MJD - 39126.) X 0.002592 S
- 1972 JAN  1 =JD 2441317.5  TAI-UTC=  10.0       S + (MJD - 41317.) X 0.0      S
- 1972 JUL  1 =JD 2441499.5  TAI-UTC=  11.0       S + (MJD - 41317.) X 0.0      S
- 1973 JAN  1 =JD 2441683.5  TAI-UTC=  12.0       S + (MJD - 41317.) X 0.0      S
- 1974 JAN  1 =JD 2442048.5  TAI-UTC=  13.0       S + (MJD - 41317.) X 0.0      S
- 1975 JAN  1 =JD 2442413.5  TAI-UTC=  14.0       S + (MJD - 41317.) X 0.0      S
- 1976 JAN  1 =JD 2442778.5  TAI-UTC=  15.0       S + (MJD - 41317.) X 0.0      S
- 1977 JAN  1 =JD 2443144.5  TAI-UTC=  16.0       S + (MJD - 41317.) X 0.0      S
- 1978 JAN  1 =JD 2443509.5  TAI-UTC=  17.0       S + (MJD - 41317.) X 0.0      S
- 1979 JAN  1 =JD 2443874.5  TAI-UTC=  18.0       S + (MJD - 41317.) X 0.0      S
- 1980 JAN  1 =JD 2444239.5  TAI-UTC=  19.0       S + (MJD - 41317.) X 0.0      S
- 1981 JUL  1 =JD 2444786.5  TAI-UTC=  20.0       S + (MJD - 41317.) X 0.0      S
- 1982 JUL  1 =JD 2445151.5  TAI-UTC=  21.0       S + (MJD - 41317.) X 0.0      S
- 1983 JUL  1 =JD 2445516.5  TAI-UTC=  22.0       S + (MJD - 41317.) X 0.0      S
- 1985 JUL  1 =JD 2446247.5  TAI-UTC=  23.0       S + (MJD - 41317.) X 0.0      S
- 1988 JAN  1 =JD 2447161.5  TAI-UTC=  24.0       S + (MJD - 41317.) X 0.0      S
- 1990 JAN  1 =JD 2447892.5  TAI-UTC=  25.0       S + (MJD - 41317.) X 0.0      S
- 1991 JAN  1 =JD 2448257.5  TAI-UTC=  26.0       S + (MJD - 41317.) X 0.0      S
- 1992 JUL  1 =JD 2448804.5  TAI-UTC=  27.0       S + (MJD - 41317.) X 0.0      S
- 1993 JUL  1 =JD 2449169.5  TAI-UTC=  28.0       S + (MJD - 41317.) X 0.0      S
- 1994 JUL  1 =JD 2449534.5  TAI-UTC=  29.0       S + (MJD - 41317.) X 0.0      S
- 1996 JAN  1 =JD 2450083.5  TAI-UTC=  30.0       S + (MJD - 41317.) X 0.0      S
- 1997 JUL  1 =JD 2450630.5  TAI-UTC=  31.0       S + (MJD - 41317.) X 0.0      S
- 1999 JAN  1 =JD 2451179.5  TAI-UTC=  32.0       S + (MJD - 41317.) X 0.0      S
- 2006 JAN  1 =JD 2453736.5  TAI-UTC=  33.0       S + (MJD - 41317.) X 0.0      S
diff --git a/time.cabal b/time.cabal
--- a/time.cabal
+++ b/time.cabal
@@ -1,5 +1,5 @@
 name:           time
-version:        1.4.0.1
+version:        1.4.0.2
 stability:      stable
 license:        BSD3
 license-file:   LICENSE
@@ -9,8 +9,8 @@
 synopsis:       A time library
 description:    A time library
 category:       System
-build-type:  Custom
-cabal-version:   >=1.6
+build-type:     Configure
+cabal-version:  >=1.14
 x-follows-version-policy:
 
 extra-source-files:
@@ -20,29 +20,36 @@
     include/HsConfigure.h
     include/HsTime.h
     include/HsTimeConfig.h.in
-    test/Makefile
-    test/*.hs
-    test/*.lhs
-    test/*.ref
-    test/*.dat
-    test/*.c
-    test/*.h
+    Test/*.hs
+    Test/*.lhs
+    Test/*.c
+    Test/*.h
 extra-tmp-files:
     config.log
     config.status
     autom4te.cache
     include/HsTimeConfig.h
 
+source-repository head
+  type:     darcs
+  location: http://code.haskell.org/time/
+
 library
-{
-    build-depends: base == 4.*, deepseq >= 1.1, old-locale
+    build-depends: 
+        base >= 4 && < 5,
+        deepseq >= 1.1,
+        old-locale
     ghc-options: -Wall
+    default-language: Haskell2010
     if impl(ghc)
-        extensions: Rank2Types DeriveDataTypeable StandaloneDeriving
+        default-extensions: 
+            Rank2Types 
+            DeriveDataTypeable 
+            StandaloneDeriving
         cpp-options: -DLANGUAGE_Rank2Types -DLANGUAGE_DeriveDataTypeable -DLANGUAGE_StandaloneDeriving
     else
         if impl(hugs)
-            extensions: Rank2Types
+            default-extensions: Rank2Types
             cpp-options: -DLANGUAGE_Rank2Types
     if os(windows)
         build-depends: Win32
@@ -59,7 +66,7 @@
         Data.Time.LocalTime,
         Data.Time.Format,
         Data.Time
-    extensions:    ForeignFunctionInterface, CPP
+    default-extensions:    CPP
     c-sources:    cbits/HsTime.c
     other-modules:
         Data.Time.Calendar.Private,
@@ -82,5 +89,79 @@
         install-includes:
             HsTime.h
             HsTimeConfig.h
-}
 
+test-suite tests
+    type: exitcode-stdio-1.0
+    default-language: Haskell2010
+    default-extensions: 
+        Rank2Types
+        CPP
+        DeriveDataTypeable
+        StandaloneDeriving
+        ExistentialQuantification
+        MultiParamTypeClasses
+        FlexibleInstances
+        UndecidableInstances
+        ScopedTypeVariables
+    cpp-options: -DLANGUAGE_Rank2Types -DLANGUAGE_DeriveDataTypeable -DLANGUAGE_StandaloneDeriving
+    ghc-options: -Wall
+    c-sources: cbits/HsTime.c Test/TestFormatStuff.c
+    include-dirs: include
+    build-depends: 
+        base,
+        deepseq,
+        Cabal >= 1.16,
+        old-locale,
+        process,
+        QuickCheck >= 2.5.1,
+        test-framework >= 0.6.1,
+        test-framework-quickcheck2 >= 0.2.12
+    main-is: Test.hs
+    other-modules:
+        Test.Tests
+        Test.TestTime
+        Test.TestTimeRef
+        Test.TestParseDAT
+        Test.TAI_UTC_DAT
+        Test.TestParseDAT_Ref
+        Test.TestParseTime
+        Test.TestMonthDay
+        Test.TestMonthDayRef
+        Test.TestFormat
+        Test.TestEaster
+        Test.TestEasterRef
+        Test.TestCalendars
+        Test.TestCalendarsRef
+        Test.LongWeekYears
+        Test.LongWeekYearsRef
+        Test.ConvertBack
+        Test.ClipDates
+        Test.ClipDatesRef
+        Test.AddDays
+        Test.AddDaysRef
+        Test.TestUtil
+
+        Data.Time.Calendar.Private,
+        Data.Time.Calendar.Days,
+        Data.Time.Calendar.Gregorian,
+        Data.Time.Calendar.JulianYearDay,
+        Data.Time.Clock.Scale,
+        Data.Time.Clock.UTC,
+        Data.Time.Clock.CTimeval,
+        Data.Time.Clock.UTCDiff,
+        Data.Time.LocalTime.TimeZone,
+        Data.Time.LocalTime.TimeOfDay,
+        Data.Time.LocalTime.LocalTime,
+        Data.Time.Format.Parse
+        Data.Time.Calendar,
+        Data.Time.Calendar.MonthDay,
+        Data.Time.Calendar.OrdinalDate,
+        Data.Time.Calendar.WeekDate,
+        Data.Time.Calendar.Julian,
+        Data.Time.Calendar.Easter,
+        Data.Time.Clock,
+        Data.Time.Clock.POSIX,
+        Data.Time.Clock.TAI,
+        Data.Time.LocalTime,
+        Data.Time.Format,
+        Data.Time
