diff --git a/test/AddDays.hs b/test/AddDays.hs
new file mode 100644
--- /dev/null
+++ b/test/AddDays.hs
@@ -0,0 +1,41 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/AddDays.ref
@@ -0,0 +1,245 @@
+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,26 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/ClipDates.ref
@@ -0,0 +1,561 @@
+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,36 @@
+{-# 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
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,18 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/LongWeekYears.ref
@@ -0,0 +1,150 @@
+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
new file mode 100644
--- /dev/null
+++ b/test/Makefile
@@ -0,0 +1,102 @@
+GHC = ghc
+GHCFLAGS = -package time
+
+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) -package QuickCheck $^ -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
+
+clean:
+	rm -rf TestMonthDay ConvertBack TestCalendars TestTime LongWeekYears ClipDates	\
+	AddDays TestFormat TestParseDAT TestEaster CurrentTime ShowDST TimeZone TimeZone.ref TestParseTime \
+        *.out *.o *.hi Makefile.bak
+
+%.diff: %.ref %.out
+	diff -u $^
+
+%.diff0: %.out
+	echo -n | diff -u - $^
+
+%.out: %
+	./$< > $@
+
+%.run: %
+	./$<
+
+%.hi: %.o
+	@:
+
+%.o: %.hs
+	$(GHC) $(GHCFLAGS) -c $< -o $@
+
+%.o: %.lhs
+	$(GHC) $(GHCFLAGS) -c $< -o $@
+
+FORCE:
+
+.SECONDARY:
+
+# TestTime.o TestFormat.o CurrentTime.o ShowDST.o TimeZone.o: $(patsubst %.hs,%.hi,$(SRCS))
+
+TestFixed.o: ../Data/Fixed.hi
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/TestCalendars.hs b/test/TestCalendars.hs
new file mode 100644
--- /dev/null
+++ b/test/TestCalendars.hs
@@ -0,0 +1,29 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/TestCalendars.ref
@@ -0,0 +1,4 @@
+ == 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,23 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/TestEaster.ref
@@ -0,0 +1,57 @@
+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,101 @@
+{-# 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
+
+{-
+	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)
+
+
+main :: IO ()
+main = 
+	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
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,20 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/TestMonthDay.ref
@@ -0,0 +1,746 @@
+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,62 @@
+{-# 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
new file mode 100644
--- /dev/null
+++ b/test/TestParseDAT.ref
@@ -0,0 +1,90 @@
+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,357 @@
+{-# OPTIONS -Wall -Werror -fno-warn-type-defaults -fno-warn-unused-binds -fno-warn-orphans #-}
+
+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
+
+
+ntest :: Int
+ntest = 1000
+
+main :: IO ()
+main = do putStrLn "Should work:"
+          checkAll properties
+          putStrLn "Known failures:"
+          checkAll knownFailures
+
+checkAll :: [NamedProperty] -> IO ()
+checkAll ps = mapM_ (checkOne config) ps
+ where config = defaultConfig { configMaxTest = ntest }
+       
+checkOne :: Config -> NamedProperty -> IO ()
+checkOne config (n,p) = 
+    do putStr (rpad 65 ' ' n)
+       check config p
+  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
new file mode 100644
--- /dev/null
+++ b/test/TestTime.hs
@@ -0,0 +1,87 @@
+{-# 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)))
+
+main :: IO ()
+main = do
+	testCal
+	testUTC
+	testUT1
diff --git a/test/TestTime.ref b/test/TestTime.ref
new file mode 100644
--- /dev/null
+++ b/test/TestTime.ref
@@ -0,0 +1,869 @@
+-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
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/test/tai-utc.dat b/test/tai-utc.dat
new file mode 100644
--- /dev/null
+++ b/test/tai-utc.dat
@@ -0,0 +1,37 @@
+ 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.2.0.1
+version:        1.2.0.2
 stability:      stable
 license:        BSD3
 license-file:   LICENSE
@@ -20,6 +20,13 @@
     include/HsConfigure.h
     include/HsTime.h
     include/HsTimeConfig.h.in
+    test/Makefile
+    test/*.hs
+    test/*.lhs
+    test/*.ref
+    test/*.dat
+    test/*.c
+    test/*.h
 extra-tmp-files:
     config.log
     config.status
