Skip to content

Commit 966f65f

Browse files
cache more things in set generation and be more lazy about explain (#67)
1 parent 3a02d03 commit 966f65f

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/Constrained/GenT.hs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,7 @@ fatalError = fatalErrorNE . pure
206206

207207
-- | Attach an explanation to a computation in case of error
208208
explain :: MonadGenError m => String -> m a -> m a
209-
explain s
210-
| null s = id
211-
| otherwise = explainNE (pure s)
209+
explain = explainNE . pure
212210

213211
-- GE instance
214212

src/Constrained/Spec/Set.hs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -153,8 +153,8 @@ instance (Ord a, HasSpec a) => HasSpec (Set a) where
153153
size <- fromInteger <$> genFromSpecT szSpec'
154154
let additions = Set.fromList $ take (size - Set.size must) choices
155155
pure (Set.union must additions)
156-
genFromTypeSpec (SetSpec must elemS szSpec) = do
157-
let szSpec' = szSpec <> geqSpec (sizeOf must) <> maxSpec (cardinality elemS)
156+
genFromTypeSpec (SetSpec must (simplifySpec -> elemS) szSpec) = do
157+
let szSpec' = szSpec <> geqSpec (sizeOf must) <> maxSpec cardinalityElem
158158
chosenSize <-
159159
explain "Choose a size for the Set to be generated" $
160160
genFromSpecT szSpec'
@@ -176,7 +176,9 @@ instance (Ord a, HasSpec a) => HasSpec (Set a) where
176176
GT -> go 100 targetSize must
177177
EQ -> go 100 targetSize must
178178
where
179-
theMostWeCanExpect = maxFromSpec 0 (cardinality (simplifySpec elemS))
179+
cardinalityElem = cardinality elemS
180+
theMostWeCanExpect = maxFromSpec 0 cardinalityElem
181+
genElem = genFromSpecT elemS
180182
go _ n s | n <= 0 = pure s
181183
go tries n s = do
182184
e <-
@@ -190,7 +192,7 @@ instance (Ord a, HasSpec a) => HasSpec (Set a) where
190192
]
191193
)
192194
$ withMode Strict
193-
$ suchThatWithTryT tries (genFromSpecT elemS) (`Set.notMember` s)
195+
$ suchThatWithTryT tries genElem (`Set.notMember` s)
194196

195197
go tries (n - 1) (Set.insert e s)
196198

0 commit comments

Comments
 (0)