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