@@ -265,7 +265,8 @@ genMergingTreeData genKey genVal genBlob =
265265--
266266-- The size is measured by the number of MergingTreeData constructors.
267267genMergingTreeDataOfSize ::
268- Ord k => Gen k -> Gen v -> Gen b -> Int -> Gen (MergingTreeData k v b )
268+ forall k v b . Ord k
269+ => Gen k -> Gen v -> Gen b -> Int -> Gen (MergingTreeData k v b )
269270genMergingTreeDataOfSize genKey genVal genBlob = \ n0 -> do
270271 tree <- genMergingTree n0
271272 assert (mergingTreeDataSize tree == n0) $
@@ -277,8 +278,8 @@ genMergingTreeDataOfSize genKey genVal genBlob = \n0 -> do
277278
278279 | n == 1
279280 = QC. oneof
280- [ CompletedTreeMergeData <$> genRunData genKey genVal genBlob
281- , OngoingTreeMergeData <$> genMergingRunData arbitrary genKey genVal genBlob
281+ [ CompletedTreeMergeData <$> genRun
282+ , OngoingTreeMergeData <$> genMergingRun arbitrary
282283 , genPendingLevelMergeNoChild
283284 ]
284285
@@ -290,12 +291,12 @@ genMergingTreeDataOfSize genKey genVal genBlob = \n0 -> do
290291
291292 -- n == 1
292293 genPendingLevelMergeNoChild = do
293- numPreExisting <- chooseIntSkewed (0 , 5 )
294+ numPreExisting <- chooseIntSkewed (0 , 6 )
294295 initPreExisting <- QC. vectorOf numPreExisting $
295296 -- these can't be last level. we generate the last input below.
296- genPreExistingRunData (pure MR. MergeMidLevel ) genKey genVal genBlob
297+ genPreExistingRun (pure MR. MergeMidLevel )
297298 -- there must be at least one (last) input to the pending merge.
298- lastPreExisting <- genPreExistingRunData arbitrary genKey genVal genBlob
299+ lastPreExisting <- genPreExistingRun arbitrary
299300 let preExisting = initPreExisting ++ [lastPreExisting]
300301 return (PendingLevelMergeData preExisting Nothing )
301302
@@ -304,7 +305,7 @@ genMergingTreeDataOfSize genKey genVal genBlob = \n0 -> do
304305 numPreExisting <- chooseIntSkewed (0 , 6 )
305306 preExisting <- QC. vectorOf numPreExisting $
306307 -- there can't be a last level merge, child is last
307- genPreExistingRunData (pure MR. MergeMidLevel ) genKey genVal genBlob
308+ genPreExistingRun (pure MR. MergeMidLevel )
308309 tree <- genMergingTree (n - 1 )
309310 return (PendingLevelMergeData preExisting (Just tree))
310311
@@ -313,6 +314,18 @@ genMergingTreeDataOfSize genKey genVal genBlob = \n0 -> do
313314 ns <- QC. shuffle =<< arbitraryPartition2 (n - 1 )
314315 PendingUnionMergeData <$> traverse genMergingTree ns
315316
317+ genRun = genScaled genRunData
318+ genMergingRun genType = genScaled (genMergingRunData genType)
319+ genPreExistingRun genType = genScaled (genPreExistingRunData genType)
320+
321+ -- To avoid generating too large test cases, we reduce the number of
322+ -- entries for each run. The size of the individual entries is unaffected.
323+ genScaled :: forall r . (Gen k -> Gen v -> Gen b -> Gen r ) -> Gen r
324+ genScaled gen =
325+ QC. sized $ \ s ->
326+ QC. scale (`div` 2 ) $
327+ gen (QC. resize s genKey) (QC. resize s genVal) (QC. resize s genBlob)
328+
316329 -- skewed towards smaller values
317330 chooseIntSkewed (lb, ub) = do
318331 ub' <- QC. chooseInt (lb, ub)
0 commit comments