-
Notifications
You must be signed in to change notification settings - Fork 10
Description
This issue calls for improving code coverage of the main library.
A code coverage report was created by executing cabal test --enable-coverage lsm-tree:lsm-tree-test on the jeltsch/unsliced-keys-in-ordinary-indexes branch as of 28 March 2025, that is, on commit dd6b71c.
The individual coverage deficits of all modules in the main library where examined. All non-trivial cases of missing coverage are listed below. Each case is described by either of the following:
- A situation that never occurred, which led to code not being executed
- A value that was never used (in which case the description contains the phrase “never used”)
Coverage deficits of the following kinds were considered trivial and are therefore not mentioned here:
- Derived class instantiations
- Instantiations of
NFData - Field selectors
- Error message strings or parts thereof
- Deliberately unused values1 (where it was clear that they are deliberately unused)
- Explicit
()
Data.Arena
scrambleArena- Non-empty free list
newBlockWithFree- Non-empty free list
Data.Map.Range
rangeLookup- Unbounded in at least one direction
evalLowerBound- Exclusive lower bound
Database.LSMTree
Bifunctor LookupResult- Never used
Bifunctor (QueryResult k)- Never used
rangeLookup- Resolver never used
withCursor- Never used
withCursorAtOffset- Never used
readCursor- Resolver never used
retrieveBlobs- Invalid blob reference
unions- Table type mismatch
Database.LSMTree.Common
Nothing
Database.LSMTree.Internal
- All trace messages never used
withOpenSession- Session is closed
openSession- Unexected error when acquiring session file lock
- Session directory locked with
tryLockFilereturningNothing - Registry never used for restoring session
- Active directory never used when removing it in session creation
- Snapshots directory never used when removing it in session creation
- Corrupted snapshots directory when restoring session
- Non-empty active directory when restoring session
- Session already closed when closing session
- Rollback for cursor list acquisition when closing session
- Non-empty list of cursors when closing session
- Rollback for table list acquisition when closing session
newEmptyTableContent- Registry never used for creating levels cache
rangeLookup- Resolver never used
- Multiple chunks
readCursor- Resolver never used
readCursorWhile- Resolver never used
createSnapshot- Named snapshot directory never used when rolling back snapshot directory creation
openSnapshot- Wrong table type
- Resolver never used when opening write buffer
wrapFileCorruptedErrorAsSnapshotCorruptedError- Ordinary action registry abort (
ExitCaseAbort) - Commit action registry error
- Unmentioned exception
- Ordinary action registry abort (
doesSnapshotExist- Never used
listSnapshots- Alleged snapshot directory not being a directory
unions- Table session mismatch
- Session closed
- Unmodified session state after creation of unions table never used
writeBufferToNewRun- Level number 1 never used
matchSessions- Session root mismatch
supplyUnionCredits- Union level denotation never used
Database.LSMTree.Internal.Assertions
fromIntegralChecked- Conversion error found
Database.LSMTree.Internal.BitMath
mod2- Never used
ceilDiv2- Never used
mod4- Never used
div16- Never used
mod16- Never used
mul16- Never used
divPageSize- Never used
modPageSize- Never used
Database.LSMTree.Internal.BlobFile
openBlobFile- Error when opening the file
Database.LSMTree.Internal.BlobRef
deRefWeakBlobRef- Invalid reference
Database.LSMTree.Internal.BloomFilter
bloomFilterFromSBS- Wrong endianness
- Bloom filter too large
- Byte array too large for components
Database.LSMTree.Internal.BloomFilterQuery1
Show RunIxKeyIx- Never used
Database.LSMTree.Internal.BloomFilterQuery2
- All assertion properties never used
alignmentOfType# @CandidateProbe- Never used
indexOffAddr# @CandidateProbe- Never used
Show CandidateProbe- Never used
Database.LSMTree.Internal.ByteString
tryCheapToShort- Never used
tryGetByteArray- Non-zero offset into byte array
- Contents referenced by a
MallocPtr - Contents referenced by a
PlainForeignPtr - Contents referenced by a
FinalPtr
unsafePinnedByteArrayToByteString- Byte array not pinned
- Contents pointer never used
Database.LSMTree.Internal.CRC32C
hGetExactlyCRC32C_SBS- Contents pointer never used
hGetAllCRC32C'- Non-positive chunk size
- Contents pointer of internally used byte string never used
Database.LSMTree.Internal.ChecksumHandle
Nothing
Database.LSMTree.Internal.Chunk
Nothing
Database.LSMTree.Internal.Config
runParamsForLevel- Level number never used
Semigroup TableConfigOverride- Never used
Monoid TableConfigOverride- Never used
configOverrideDiskCachePolicy- Never used
bloomFilterAllocForLevel- FPR request
diskCachePolicyForLevel- Caching from a given level downwards
Database.LSMTree.Internal.Cursor
readEntriesWhile- Mupsert with a key that has other entries
Database.LSMTree.Internal.Entry
hasBlob- Never used
onBlobRef- Never used
bifoldMap @Entry- Blob reference not used when inserting with blob
combineMaybe- Never used
Database.LSMTree.Internal.IncomingRun
nominalDebtAsCredits- Never used
supplyCreditsIncomingRun- Level number never used when computing threshold
depositNominalCredits- Previous nominal credits never used
immediatelyCompleteIncomingRun- Level number never used when supplying credits
Database.LSMTree.Internal.Index
Nothing
Database.LSMTree.Internal.Index.Compact
search- Empty index
- Sequence of large-entry pages and pages with clashes without preceding pages found
- Search key belongs to the second or later page in a series of clashing pages2
hasClashes- Never used
toLBS- Never used
putBitVec- Bit vector not byte-aligned
fromSBS- Wrong endianness
- Number of pages not representable as
Intvalue - Number of entries not representable as
Intvalue - Byte array too large for components
checkedPrimVec- Negative offset
checkedBitVec- Negative offset
bitIndexFromToRev- No upper bound
vectorLowerBound- No lower bound
vectorUpperBound- Exclusive upper bound
Database.LSMTree.Internal.Index.CompactAcc
Nothing
Database.LSMTree.Internal.Index.Ordinary
fromSBS- Wrong endianness
- Number of entries not representable as
Intvalue
Database.LSMTree.Internal.Index.OrdinaryAcc
Nothing
Database.LSMTree.Internal.Lookup
intraPageLookupsOn- Combining of entries never used (two occurrences)
- Byte count discrepancy
Database.LSMTree.Internal.Merge
abort- Implicitly closed merge
- Explicitly closed merge
complete- Ongoing merge
- Implicitly closed merge
- Explicitly closed merge
stepsToCompletion- Never used
steps- Completed merge
- Implicitly closed merge
- Explicitly closed merge
doStepsLevel- Readers drained when handling mupdate
- Readers drained when dropping remaining entries of the same key
Database.LSMTree.Internal.MergeSchedule
- All trace messages never used
mkLevelsCache- Reference release operation never used in rollback for duplicating runs
iforLevelM_- Level number never used by consumer
flushWriteBuffer- Empty table write buffer
- Level number 1 never used
addRunToLevels- Level number never used when immediately completing incoming run
mergingRunParamsForLevel- Regular level specification never used
maxRunSize- Negative level number
mergeTypeForLevel- Last-level denotation never used
supplyCredits- Level numbers never used
Database.LSMTree.Internal.MergingRun
new- Empty new merge
newCompleted- Error handler never used
unsafeNew- Table too large
atomicModifyInt- CAS looping
supplyCreditsAbsolute- Information on supplied credits never used (two values)
performMergeSteps- Merge completed
completeMerge- Merge completed
expectCompleted- Merge maybe completed
- Merge ongoing
Database.LSMTree.Internal.MergingTree
expectCompleted- Ongoing tree merge
- Pending tree merge
Database.LSMTree.Internal.MergingTree.Lookup
mkLookupNode- One lookup tree
mergeLookupAcc- Resolver never used when merging levels
buildLookupTree- Reference release operation never used in rollback for duplicating runs (two occurrences)
- Pending level merge with no merging runs but a union merge
Database.LSMTree.Internal.Page
Nothing
Database.LSMTree.Internal.PageAcc
Nothing
Database.LSMTree.Internal.PageAcc1
singletonPage- Deletion
Database.LSMTree.Internal.Paths
isValidSnapshotName- String contains a character that is neither a lowercase Latin letter nor a digit
toSnapshotName- String is not a valid snapshot name
pure @ForRunFiles- Never used
Database.LSMTree.Internal.Primitive
Nothing
Database.LSMTree.Internal.Range
Nothing
Database.LSMTree.Internal.RawBytes
IsList RawBytes- Never used
unpack- Never used
unsafeFromByteString- Byte array fetching unsuccessful
Database.LSMTree.Internal.RawOverflowPage
Nothing
Database.LSMTree.Internal.RawPage
getRawPageIndexKey- No index
Database.LSMTree.Internal.Run
Show (Run m h)- Never used
runFsPathsNumber- Never used
mkRawBlobRef- Never used
openFromDisk- Invalid file (three occurrences)
- Unexpected checksum
Database.LSMTree.Internal.RunAcc
addKeyOp- Chunks emmitted by small key/op addition with page emission never used
Database.LSMTree.Internal.RunBuilder
Nothing
Database.LSMTree.Internal.RunNumber
Nothing
Database.LSMTree.Internal.RunReader
Nothing
Database.LSMTree.Internal.RunReaders
Eq (ReadCtx m h)- Never used
nextReadCtx- Reinstantiated empty key/op buffer never used
Database.LSMTree.Internal.Serialise
sizeofKey64- Never used
sizeofValue16- Never used
sizeofValue64- Never used
serialisedValue- Never used
SerialisedBlob- Never used (at least not in expressions)
serialisedBlob- Never used
Database.LSMTree.Internal.Serialise.Class
serialiseKeyMinimalSize- Never used
requireBytesExactly- Unexpected number of bytes
deserialiseKey @Word64- Unexpected number of bytes
deserialiseValue @Word64- Unexpected number of bytes
serialiseValue @Void- Never used
deserialiseValue @Void- Never used
Database.LSMTree.Internal.Snapshot
fromSnapMergingTree- Completed tree merge
- Pending level merge
snapshotWriteBuffer- Rollback for write buffer writing
openWriteBuffer- Resolver never used
fromSnapLevels- Level number never used
fromSnapMergingRun- Error handler never used
Database.LSMTree.Internal.Snapshot.Codec
prettySnapshotVersion- Never used
readFileSnapshotMetaData- Invalid file
decodeSnapshotMetaData- Exception
decode @(Versioned a)- Incompatible snapshot format version
decode @SnapshotVersion- Unknown snapshot format version
decodeVersioned @SnapshotTableType- Unexpected tag
decodeVersioned @SnapshotRun- Unexpected combination of list length and tag
decodeVersioned @MergePolicy- Unexpected tag
decodeVersioned @SizeRation- Not 4
decodeVersioned @WriteBufferAlloc- Unexpected tag
decodeVersioned @RunParams- Unexpected combination of list length and tag
decodedVersion @RunDataCaching- Unexpected tag
decodedVersion @IndexType- Unexpected tag
decodedVersion @RunBloomFilterAlloc- Unexpected combination of list length and tag
decodedVersion @BloomFilterAlloc- Unexpected combination of list length and tag
decodedVersion @FencePointerIndex- Unexpected tag
decodedVersion @DiskCachePolicy- Unexpected combination of list length and tag
decodedVersion @MergeSchedule- Unexpected tag
decodedVersion @SnapIncomingRun- Unexpected combination of list length and tag
decodedVersion @MergePolicyForLevel- Unexpected tag
decodedVersion @SnapMergingRun- Unexpected combination of list length and tag
decodedVersion @LevelMergeType- Unexpected tag
decodedVersion @TreeMergeType- Unexpected tag
decodedVersion @SnapMergingTreeState- Unexpected combination of list length and tag
decodedVersion @SnapPendingMerge- Unexpected combination of list length and tag
decodedVersion @SnapPreExistingRun- Unexpected combination of list length and tag
Database.LSMTree.Internal.StrictArray
Nothing
Database.LSMTree.Internal.UniqCounter
Nothing
Database.LSMTree.Internal.Unsliced
unsafeMakeUnsliced- Never used
unsafeMakeUnslicedKey- Never used
Show (Unsliced SerialisedKey)- Never used
Database.LSMTree.Internal.Vector
mapMStrict- Never used
imapMStrict- Never used
zipWithStrict- Never used
Database.LSMTree.Internal.Vector.Growing
new- Non-positive buffer size
append- Length overflow
- Only one possible new buffer size
- No possible new buffer size
Database.LSMTree.Internal.WriteBuffer
fromList- Never used
lookups- Never used
rangeLookups- Never used
convertRange- Never used
Database.LSMTree.Internal.WriteBufferBlobs
Nothing
Database.LSMTree.Internal.WriteBufferReader
readWriteBuffer- Resolver never used
new- Error handler never used (two occurrences)
Database.LSMTree.Internal.WriteBufferWriter
unsafeFinalise- Result never used
Database.LSMTree.Monoidal
withTable- Never used
new- Never used
close- Never used
lookups- Never used
rangeLookup- Never used
withCursor- Never used
withCursorAtOffset- Never used
newCursor- Never used
newCursorAtOffset- Never used
closeCursor- Never used
readCursor- Never used
updates- Never used
inserts- Never used
deletes- Never used
mupserts- Never used
createSnapshot- Never used
openSnapshot- Never used
duplicate- Never used
union- Never used
unions- Never used
remainingUnionDebt- Never used
supplyUnionCredits- Never used
resolve- Never used
Database.LSMTree.Normal
withTable- Never used
new- Never used
close- Never used
Bifunctor LookupResult- Never used
lookups- Never used
Bifunctor (QueryResult k)- Never used
rangeLookup- Never used
withCursor- Never used
withCursorAtOffset- Never used
newCursor- Never used
newCursorAtOffset- Never used
closeCursor- Never used
readCursor- Never used
toNormalQueryResult- Never used
updates- Never used
inserts- Never used
deletes- Never used
retrieveBlobs- Never used
createSnapshot- Never used
openSnapshot- Never used
duplicate- Never used
union- Never used
unions- Never used
remainingUnionDebt- Never used
supplyUnionCredits- Never used
Footnotes
-
An example is the
indexargument in the second alternative ofDatabase.LSMTree.Internal.Index.finalLBS, which is not used by the underlying functionDatabase.LSMTree.Internal.Index.Ordinary.finalLBS. ↩ -
The existence of this case in connection with the previous one suggests that there might be no clashes at all. ↩