@@ -14,6 +14,7 @@ import Data.Map (Map)
1414import qualified Data.Map as Map
1515import Data.Traversable (for )
1616import qualified Data.Vector as V
17+ import Database.LSMTree.Extras (showPowersOf10 )
1718import Database.LSMTree.Extras.MergingRunData
1819import Database.LSMTree.Extras.MergingTreeData
1920import Database.LSMTree.Extras.RunData
@@ -229,22 +230,38 @@ prop_supplyCredits hfs hbio threshold credits mtd = do
229230 FS. createDirectory hfs (FS. mkFsPath [" active" ])
230231 counter <- newUniqCounter 0
231232 withMergingTree hfs hbio resolveVal runParams setupPath counter mtd $ \ tree -> do
233+ (MR. MergeDebt initialDebt, _) <- remainingMergeDebt tree
232234 props <- for credits $ \ c -> do
233235 (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)
245256 where
246257 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"
248265
249266instance Arbitrary MR. MergeCredits where
250267 arbitrary = MR. MergeCredits . getPositive <$> arbitrary
0 commit comments