Skip to content

Commit d6e2a40

Browse files
committed
add old-time instances for ghc
many errors when building old-locale, see below for example ``` error: Time.hsc:380:2: error: #error "Don't know how to get at timezone name on your OS." ```
1 parent 1d0f6ce commit d6e2a40

2 files changed

Lines changed: 77 additions & 0 deletions

File tree

QuickCheck.cabal

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ library
146146
cpp-options:
147147
-DNO_DATAFIX
148148
-DNO_HASHABLE
149+
-DNO_OLDTIME
149150

150151
-- random is explicitly Trustworthy since 1.0.1.0
151152
-- similar constraint for containers
@@ -156,6 +157,7 @@ library
156157
, data-fix >=0.3 && <0.4
157158
, integer-logarithms >=1.0.3.1 && <1.1
158159
, hashable >=1.4.4.0 && <1.6
160+
, old-time >=1.1.0.0 && <1.2
159161

160162
if impl(ghc >= 9.8)
161163
ghc-options: -Wno-x-partial

src/Test/QuickCheck/Arbitrary.hs

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,9 @@ import GHC.Generics
210210
#ifndef NO_HASHABLE
211211
import 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
214217
import qualified Data.Semigroup as Semigroup
215218
#endif
@@ -266,6 +269,7 @@ a CChar, CSChar, CUChar, CShort, CUShort, CInt, CUInt, CLong, CULong, CPtrdiff
266269
if c type constructors allowed: a CClock, CTime
267270
if foreign c unsigned seconds: a CUSeconds, CSUSeconds
268271
a CFloat, CDouble
272+
if old-time allowed: ac OldTime.Month, OldTime.Day, OldTime.ClockTime, OldTime.TimeDiff, OldTime.CalendarTime
269273
if hashable allowed: ac Hashed
270274
a Set
271275
a1 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

Comments
 (0)