{-# LANGUAGE OverloadedStrings , UnicodeSyntax , ViewPatterns #-} module Main (main) where import Control.Applicative import Control.Applicative.Unicode import Data.Time import qualified Data.Time.Asctime as Asctime import System.Exit import Prelude.Unicode import Test.QuickCheck main ∷ IO () main = mapM_ runTest tests runTest ∷ Property → IO () runTest prop = do r ← quickCheckResult prop case r of Success {} → return () GaveUp {} → exitFailure Failure {} → exitFailure NoExpectedFailure {} → exitFailure instance Arbitrary Day where arbitrary = ModifiedJulianDay <$> arbitrary instance Arbitrary TimeOfDay where arbitrary = do h ← choose (0, 23) m ← choose (0, 59) s ← choose (0, 60) return $ TimeOfDay h m (fromIntegral (s ∷ Int)) instance Arbitrary LocalTime where arbitrary = LocalTime <$> arbitrary ⊛ arbitrary tests ∷ [Property] tests = [ -- Asctime property ( Asctime.fromAscii "Sun Nov 6 08:49:37 1994" ≡ Right (LocalTime (ModifiedJulianDay 49662) (TimeOfDay 8 49 37)) ) , property ( Asctime.toAscii (LocalTime (ModifiedJulianDay 49662) (TimeOfDay 8 49 37)) ≡ "Sun Nov 6 08:49:37 1994" ) , property $ \lt → Right lt ≡ Asctime.fromAscii (Asctime.toAscii lt) ]