@@ -10,67 +10,27 @@ module Instances where
10import Types
10import Types
11import Data.Function (on)
11import Data.Function (on)
12import Control.Monad
12import Control.Monad
13−import Test.QuickCheck (Arbitrary(..), Gen, choose, getNonNegative, elements,
13+import Test.QuickCheck (Arbitrary(..), getNonNegative, elements,
14 listOf1, oneof, resize)
14 listOf1, oneof, resize)
15−import Data.Time.Clock (DiffTime, UTCTime(..), picosecondsToDiffTime)
15+import Data.Time.Clock (UTCTime(..))
16−import Data.Fixed (Pico)
17−import Data.Time (ZonedTime(..), LocalTime(..), TimeZone(..),
16+import Data.Time (ZonedTime(..), TimeZone(..))
18− hoursToTimeZone, Day(..), TimeOfDay(..),
20import Data.Version
17import Data.Version
21−import qualified Data.Text as T
22−import Data.Text (Text)
23import Data.Aeson.Types
18import Data.Aeson.Types
24import Control.Applicative
19import Control.Applicative
25import Functions
20import Functions
27−#if !MIN_VERSION_QuickCheck(2,8,2)
22+import Test.QuickCheck.Instances ()
28−import qualified Data.Map as Map
30−instance (Ord k, Arbitrary k, Arbitrary v) => Arbitrary (Map.Map k v) where
31− arbitrary = Map.fromList <$> arbitrary
34-- "System" types.
24-- "System" types.
36−instance Arbitrary Text where
37− arbitrary = T.pack <$> arbitrary
39−instance Arbitrary TimeOfDay where
43− s <- fromRational . toRational <$> choose (0, 59 :: Double)
44− return $ TimeOfDay h m s
46−instance Arbitrary LocalTime where
47− arbitrary = LocalTime <$> arbitrary <*> arbitrary
49−instance Arbitrary TimeZone where
51− offset <- choose (0,2) :: Gen Int
52− return $ hoursToTimeZone offset
54−instance Arbitrary Day where
55− arbitrary = ModifiedJulianDay `liftM` arbitrary
57−instance Arbitrary DiffTime where
58− arbitrary = (picosecondsToDiffTime . (* 1000000000)) <$>
61−instance Arbitrary UTCTime where
62− arbitrary = liftM2 UTCTime arbitrary arbitrary
64instance Arbitrary DotNetTime where
26instance Arbitrary DotNetTime where
65 arbitrary = DotNetTime `liftM` arbitrary
27 arbitrary = DotNetTime `liftM` arbitrary
28+ shrink = map DotNetTime . shrink . fromDotNetTime
67−instance Arbitrary ZonedTime where
30+-- | Compare timezone part only on 'timeZoneMinutes'
68− arbitrary = liftM2 ZonedTime arbitrary arbitrary
70−instance Arbitrary NominalDiffTime where
71− arbitrary = realToFrac <$> (arbitrary :: Gen Pico)
73−deriving instance Eq ZonedTime
31+instance Eq ZonedTime where
32+ ZonedTime a (TimeZone a' _ _) == ZonedTime b (TimeZone b' _ _) =
75-- Compare equality to within a millisecond, allowing for rounding
35-- Compare equality to within a millisecond, allowing for rounding
76-- error (ECMA 262 requires milliseconds to rounded to zero, not
36-- error (ECMA 262 requires milliseconds to rounded to zero, not