@@ -14,6 +14,7 @@ import Data.Map (Map)
14
14
import qualified Data.Map as Map
15
15
import Data.Traversable (for )
16
16
import qualified Data.Vector as V
17
+ import Database.LSMTree.Extras (showPowersOf10 )
17
18
import Database.LSMTree.Extras.MergingRunData
18
19
import Database.LSMTree.Extras.MergingTreeData
19
20
import Database.LSMTree.Extras.RunData
@@ -229,22 +230,38 @@ prop_supplyCredits hfs hbio threshold credits mtd = do
229
230
FS. createDirectory hfs (FS. mkFsPath [" active" ])
230
231
counter <- newUniqCounter 0
231
232
withMergingTree hfs hbio resolveVal runParams setupPath counter mtd $ \ tree -> do
233
+ (MR. MergeDebt initialDebt, _) <- remainingMergeDebt tree
232
234
props <- for credits $ \ c -> do
233
235
(MR. MergeDebt debt, _) <- remainingMergeDebt tree
234
- leftovers <-
235
- supplyCredits hfs hbio resolveVal runParams threshold root counter tree c
236
- (MR. MergeDebt debt', _) <- remainingMergeDebt tree
237
- return $
238
- counterexample (show (debt, leftovers, debt')) $ conjoin [
239
- counterexample " negative values" $
240
- debt >= 0 && leftovers >= 0 && debt' >= 0
241
- , counterexample " did not reduce debt sufficiently" $
242
- debt' <= debt - (c - leftovers)
243
- ]
244
- return (conjoin (toList props))
236
+ if debt <= 0
237
+ then
238
+ return $ property True
239
+ else do
240
+ leftovers <-
241
+ supplyCredits hfs hbio resolveVal runParams threshold root counter tree c
242
+ (MR. MergeDebt debt', _) <- remainingMergeDebt tree
243
+ return $
244
+ -- semi-useful, but mainly tells us in how many steps we supplied
245
+ tabulate " supplied credits" [showPowersOf10 (fromIntegral c)] $
246
+ counterexample (show (debt, leftovers, debt')) $ conjoin [
247
+ counterexample " negative values" $
248
+ debt >= 0 && leftovers >= 0 && debt' >= 0
249
+ , counterexample " did not reduce debt sufficiently" $
250
+ debt' <= debt - (c - leftovers)
251
+ ]
252
+ (MR. MergeDebt finalDebt, _) <- remainingMergeDebt tree
253
+ return $
254
+ labelDebt initialDebt finalDebt $
255
+ conjoin (toList props)
245
256
where
246
257
root = Paths. SessionRoot (FS. mkFsPath [] )
247
- setupPath = FS. mkFsPath [" setup" ] -- separate dir, so it doesn't clash
258
+ setupPath = FS. mkFsPath [" setup" ] -- separate dir, so file paths in errors
259
+ -- are identifiable as created in setup
260
+ --
261
+ labelDebt initial final
262
+ | initial == 0 = label " trivial"
263
+ | final == 0 = label " completed"
264
+ | otherwise = label " incomplete"
248
265
249
266
instance Arbitrary MR. MergeCredits where
250
267
arbitrary = MR. MergeCredits . getPositive <$> arbitrary
0 commit comments