Takusen-0.8.4: Database/Test/Util.lhs
> {-# LANGUAGE CPP #-}
> module Database.Test.Util where
> import Database.Util
> import Test.MiniUnit
> import Data.Int
> import Data.Char
> runTest :: a -> [String] -> IO ()
> runTest _ _ = do
> counts <- runTestTT "Util module tests" testlist
> return ()
> testlist =
> [ testSubstr
> , testWordsBy
> , testInt64ToDatePartsMinDate
> , testInt64ToDatePartsMaxDate
> , testUtcTimeToInt64MinDate
> , testUtcTimeToInt64MaxDate
> , testCalTimeToInt64MinDate
> , testCalTimeToInt64MaxDate
> , testInt64ToCalTimeMinDate
> , testInt64ToCalTimeMaxDate
> , testPGDatetimeToUTCTimeMinDate
> , testPGDatetimeToUTCTimeMaxDate
> , testPGDatetimeToUTCTimeBCBoundary
> , testPGDatetimeToUTCTimeBCBoundary2
> , testUTCTimeToPGDatetimeMinDate
> , testUTCTimeToPGDatetimeMaxDate
> ]
> testSubstr = do
> assertEqual "substr - 1" "a" (substr 1 1 "abc")
> assertEqual "substr - 2" "b" (substr 2 1 "abc")
> assertEqual "substr - 3" "c" (substr 3 1 "abc")
> assertEqual "substr - 4" "bc" (substr 2 2 "abc")
> assertEqual "substr - 5" "ab" (substr 1 2 "abc")
> assertEqual "substr - 6" "abc" (substr 1 4 "abc")
> assertEqual "substr -76" "" (substr 4 4 "abc")
> testWordsBy = do
> assertEqual "wordsBy - 1" [] (wordsBy isDigit "")
> assertEqual "wordsBy - 2" [] (wordsBy isDigit " --,")
> assertEqual "wordsBy - 2.5" ["5"] (wordsBy isDigit "5")
> assertEqual "wordsBy - 2.75" ["5"] (wordsBy isDigit "5 ")
> assertEqual "wordsBy - 3" ["5"] (wordsBy isDigit "5 --,")
> assertEqual "wordsBy - 4" ["6"] (wordsBy isDigit " --,6")
> assertEqual "wordsBy - 5" ["7"] (wordsBy isDigit " --7, ")
> assertEqual "wordsBy - 6" ["100", "12", "67", "25"] (wordsBy isDigit "100-12,67--, 25")
-4712 (4713BC?) is a very common minimum date among DBMS implementations.
Maximum varies, but is often 5874897 AD.
ghc-6.4.1 needs this, because it only has Show instances for
up to 5-tuples.
#if __GLASGOW_HASKELL__ <= 604
> instance (Show a, Show b, Show c, Show d, Show e, Show f)
> => Show (a,b,c,d,e,f) where
> show (a,b,c,d,e,f) =
> "(" ++ show a
> ++ "," ++ show a
> ++ "," ++ show b
> ++ "," ++ show c
> ++ "," ++ show d
> ++ "," ++ show e
> ++ "," ++ show f
> ++ ")"
#endif
> testInt64ToDatePartsMinDate = do
> let expect :: (Int64,Int64,Int64,Int64,Int64,Int64); expect = (-4712,1,1,0,0,0)
> assertEqual "testInt64ToDatePartsMinDate" expect (int64ToDateParts (-47120101000000))
> testInt64ToDatePartsMaxDate = do
> let expect :: (Int64,Int64,Int64,Int64,Int64,Int64); expect = (999999,12,31,23,59,59)
> assertEqual "testInt64ToDatePartsMaxDate" expect (int64ToDateParts (9999991231235959))
> testUtcTimeToInt64MinDate = do
> let expect :: Int64; expect = (-47120101000000)
> assertEqual "testUtcTimeToInt64MinDate" expect (utcTimeToInt64 (mkUTCTime (-4712) 1 1 0 0 0))
> testUtcTimeToInt64MaxDate = do
> let expect :: Int64; expect = (9999991231235959)
> assertEqual "testUtcTimeToInt64MaxDate" expect (utcTimeToInt64 (mkUTCTime 999999 12 31 23 59 59))
> testCalTimeToInt64MinDate = do
> let expect :: Int64; expect = (-47120101000000)
> assertEqual "testCalTimeToInt64MinDate" expect (calTimeToInt64 (mkCalTime (-4712) 1 1 0 0 0))
> testCalTimeToInt64MaxDate = do
> let expect :: Int64; expect = (9999991231235959)
> assertEqual "testCalTimeToInt64MaxDate" expect (calTimeToInt64 (mkCalTime 999999 12 31 23 59 59))
> testInt64ToCalTimeMinDate = do
> let expect = mkCalTime (-4712) 1 1 0 0 0
> assertEqual "testInt64ToCalTimeMinDate" expect (int64ToCalTime (-47120101000000))
> testInt64ToCalTimeMaxDate = do
> let expect = mkCalTime 999999 12 31 23 59 59
> assertEqual "testInt64ToCalTimeMaxDate" expect (int64ToCalTime 9999991231235959)
> testPGDatetimeToUTCTimeMinDate = do
> let expect = mkUTCTime (-4712) 1 1 0 0 0
> assertEqual "testPGDatetimeToUTCTimeMinDate" expect (pgDatetimetoUTCTime "4713-01-01 00:00:00 BC")
> testPGDatetimeToUTCTimeMaxDate = do
> let expect = mkUTCTime 999999 1 1 0 0 0
> assertEqual "testPGDatetimeToUTCTimeMaxDate" expect (pgDatetimetoUTCTime "999999-01-01 00:00:00+00")
> testPGDatetimeToUTCTimeBCBoundary = do
> let expect = mkUTCTime 0 1 1 0 0 0
> assertEqual "testPGDatetimeToUTCTimeBCBoundary" expect (pgDatetimetoUTCTime "0001-01-01 00:00:00 BC")
> testPGDatetimeToUTCTimeBCBoundary2 = do
> let expect = mkUTCTime 0 12 31 0 0 0
> assertEqual "testPGDatetimeToUTCTimeBCBoundary2" expect (pgDatetimetoUTCTime "0001-12-31 00:00:00 BC")
> testUTCTimeToPGDatetimeMinDate = do
> let expect = "4713-01-01T00:00:00.000000+00 BC"
> assertEqual "testUTCTimeToPGDatetimeMinDate" expect (utcTimeToPGDatetime (mkUTCTime (-4712) 1 1 0 0 0))
> testUTCTimeToPGDatetimeMaxDate = do
> let expect = "999999-01-01T00:00:00.300001+00 AD"
> assertEqual "testUTCTimeToPGDatetimeMaxDate" expect (utcTimeToPGDatetime (mkUTCTime 999999 1 1 0 0 0.300001))