mmm: test for more free ranges invariants.

This commit is contained in:
fiatjaf
2026-06-17 11:57:11 -03:00
parent 71307ba4c1
commit 0d1577c4de
+20 -1
View File
@@ -239,7 +239,13 @@ func verifyFreeRangesInvariants(t *testing.T, mmmm *MultiMmapManager) {
all := mmmm.freeRangesAll
large := mmmm.freeRangesLarge
require.True(t, slices.IsSortedFunc(all, func(a, b position) int {
return cmp.Compare(a.start, b.start)
}), "free ranges aren't sorted by start position")
for _, l := range large {
require.True(t, l.isLarge())
found := false
for _, a := range all {
if l.start == a.start && l.size == a.size {
@@ -254,7 +260,7 @@ func verifyFreeRangesInvariants(t *testing.T, mmmm *MultiMmapManager) {
require.Greater(t, all[i].start, all[i-1].start, "all ranges should be sorted by start")
}
for i := range all {
for i, fr := range all {
for j := i + 1; j < len(all); j++ {
end1 := all[i].start + uint64(all[i].size)
end2 := all[j].start + uint64(all[j].size)
@@ -262,6 +268,17 @@ func verifyFreeRangesInvariants(t *testing.T, mmmm *MultiMmapManager) {
(all[j].start >= all[i].start && all[j].start < end1),
"ranges %v and %v overlap", all[i], all[j])
}
foundInLarge := false
for _, l := range large {
if l.start == fr.start {
foundInLarge = true
break
}
}
if !foundInLarge {
require.False(t, fr.isLarge())
}
}
mmmm.lmdbEnv.View(func(txn *lmdb.Txn) error {
@@ -382,6 +399,8 @@ func FuzzDefragment(f *testing.F) {
err := mmmm.Defragment(param)
require.NoError(t, err)
}
verifyFreeRangesInvariants(t, mmmm)
}
}
}