@@ -210,6 +210,9 @@ import GHC.Generics
210210#ifndef NO_HASHABLE
211211import Data.Hashable (Hashable , hashed , hashedHash , Hashed )
212212#endif
213+ #ifndef NO_OLDTIME
214+ import qualified System.Time as OldTime
215+ #endif
213216#ifndef NO_SEMIGROUP
214217import qualified Data.Semigroup as Semigroup
215218#endif
@@ -266,6 +269,7 @@ a CChar, CSChar, CUChar, CShort, CUShort, CInt, CUInt, CLong, CULong, CPtrdiff
266269if c type constructors allowed: a CClock, CTime
267270 if foreign c unsigned seconds: a CUSeconds, CSUSeconds
268271a CFloat, CDouble
272+ if old-time allowed: ac OldTime.Month, OldTime.Day, OldTime.ClockTime, OldTime.TimeDiff, OldTime.CalendarTime
269273if hashable allowed: ac Hashed
270274a Set
271275a1 Map
@@ -1026,6 +1030,77 @@ instance Arbitrary CDouble where
10261030 arbitrary = arbitrarySizedFractional
10271031 shrink = shrinkDecimal
10281032
1033+ #ifndef NO_OLDTIME
1034+ instance Arbitrary OldTime. Month where
1035+ arbitrary = arbitraryBoundedEnum
1036+
1037+ instance CoArbitrary OldTime. Month where
1038+ coarbitrary = coarbitraryEnum
1039+
1040+ instance Arbitrary OldTime. Day where
1041+ arbitrary = arbitraryBoundedEnum
1042+
1043+ instance CoArbitrary OldTime. Day where
1044+ coarbitrary = coarbitraryEnum
1045+
1046+ instance Arbitrary OldTime. ClockTime where
1047+ arbitrary =
1048+ OldTime. TOD <$> choose (0 , fromIntegral (maxBound :: Int32 ))
1049+ <*> choose (0 , 1000000000000 - 1 )
1050+ shrink (OldTime. TOD s p) =
1051+ [ OldTime. TOD s' p | s' <- shrink s ] ++
1052+ [ OldTime. TOD s p' | p' <- shrink p ]
1053+
1054+ instance CoArbitrary OldTime. ClockTime where
1055+ coarbitrary (OldTime. TOD s p) =
1056+ coarbitrary s . coarbitrary p
1057+
1058+ instance Arbitrary OldTime. TimeDiff where
1059+ -- a bit of a cheat ...
1060+ arbitrary =
1061+ OldTime. normalizeTimeDiff <$>
1062+ (OldTime. diffClockTimes <$> arbitrary <*> arbitrary)
1063+ shrink td@ (OldTime. TimeDiff year month day hour minute sec picosec) =
1064+ [ td { OldTime. tdYear = y' } | y' <- shrink year ] ++
1065+ [ td { OldTime. tdMonth = m' } | m' <- shrink month ] ++
1066+ [ td { OldTime. tdDay = d' } | d' <- shrink day ] ++
1067+ [ td { OldTime. tdHour = h' } | h' <- shrink hour ] ++
1068+ [ td { OldTime. tdMin = m' } | m' <- shrink minute ] ++
1069+ [ td { OldTime. tdSec = s' } | s' <- shrink sec ] ++
1070+ [ td { OldTime. tdPicosec = p' } | p' <- shrink picosec ]
1071+
1072+ instance CoArbitrary OldTime. TimeDiff where
1073+ coarbitrary (OldTime. TimeDiff year month day hour minute sec picosec) =
1074+ coarbitrary year .
1075+ coarbitrary month .
1076+ coarbitrary day .
1077+ coarbitrary hour .
1078+ coarbitrary minute .
1079+ coarbitrary sec .
1080+ coarbitrary picosec
1081+
1082+ -- UTC only
1083+ instance Arbitrary OldTime. CalendarTime where
1084+ arbitrary = OldTime. toUTCTime <$> arbitrary
1085+
1086+ instance CoArbitrary OldTime. CalendarTime where
1087+ coarbitrary (OldTime. CalendarTime
1088+ year month day hour minute sec picosec
1089+ wDay yDay tzName tz isDST) =
1090+ coarbitrary year .
1091+ coarbitrary month .
1092+ coarbitrary day .
1093+ coarbitrary hour .
1094+ coarbitrary minute .
1095+ coarbitrary sec .
1096+ coarbitrary picosec .
1097+ coarbitrary wDay .
1098+ coarbitrary yDay .
1099+ coarbitrary tzName .
1100+ coarbitrary tz .
1101+ coarbitrary isDST
1102+ #endif
1103+
10291104-- Arbitrary instances for container types
10301105
10311106#ifndef NO_HASHABLE
0 commit comments