Skip to content

Commit 873e59d

Browse files
committed
label MergingTree prop_supplyCredits
1 parent 5abb4fd commit 873e59d

File tree

2 files changed

+31
-14
lines changed

2 files changed

+31
-14
lines changed

src/Database/LSMTree/Internal/MergingRun.hs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -761,8 +761,8 @@ atomicSpendCredits (CreditsVar var) spend =
761761

762762
{-# SPECIALISE remainingMergeDebt ::
763763
Ref (MergingRun t IO h) -> IO (MergeDebt, NumEntries) #-}
764-
-- | Calculate an upper bound on the merge credits required to complete the
765-
-- merge, as well as an upper bound on the size of the resulting run.
764+
-- | Calculate the merge credits required to complete the merge, as well as an
765+
-- upper bound on the size of the resulting run.
766766
remainingMergeDebt ::
767767
(MonadMVar m, PrimMonad m)
768768
=> Ref (MergingRun t m h) -> m (MergeDebt, NumEntries)

test/Test/Database/LSMTree/Internal/MergingTree.hs

Lines changed: 29 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import Data.Map (Map)
1414
import qualified Data.Map as Map
1515
import Data.Traversable (for)
1616
import qualified Data.Vector as V
17+
import Database.LSMTree.Extras (showPowersOf10)
1718
import Database.LSMTree.Extras.MergingRunData
1819
import Database.LSMTree.Extras.MergingTreeData
1920
import 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

249266
instance Arbitrary MR.MergeCredits where
250267
arbitrary = MR.MergeCredits . getPositive <$> arbitrary

0 commit comments

Comments
 (0)