import Data.Time.Clock import Data.Time.LocalTime import Data.Time.ZoneInfo import System.IO.Unsafe import Test.QuickCheck import Text.Printf prop_init = do -- Use TZDIR environment variable. -- Example: -- TZDIR=/usr/etc/zoneinfo runhaskell Setup test initZoneInfo Nothing return True prop_show = do zi <- newZoneInfo "America/New_York" return (showZoneInfo zi == "America/New_York") prop_minutes = do zi <- newZoneInfo "America/New_York" est <- getZoneMinutes zi False edt <- getZoneMinutes zi True return (est == -300 && edt == -240) prop_inverse = do zi <- newZoneInfo "America/Chicago" ut <- getCurrentTime zt <- utcToZonedTime' zi ut (ut', _) <- localToUTCZoned zi (zonedTimeToLocalTime zt) return (ut == ut') quickCheckUnsafe = quickCheck . unsafePerformIO tests = [("init", quickCheckUnsafe prop_init), ("show", quickCheckUnsafe prop_show), ("minutes", quickCheckUnsafe prop_minutes), ("inverse", quickCheckUnsafe prop_inverse)] main = mapM_ (\(s, a) -> printf "%-25s: " s >> a) tests