mmm: test for more free ranges invariants.
This commit is contained in:
@@ -239,7 +239,13 @@ func verifyFreeRangesInvariants(t *testing.T, mmmm *MultiMmapManager) {
|
|||||||
all := mmmm.freeRangesAll
|
all := mmmm.freeRangesAll
|
||||||
large := mmmm.freeRangesLarge
|
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 {
|
for _, l := range large {
|
||||||
|
require.True(t, l.isLarge())
|
||||||
|
|
||||||
found := false
|
found := false
|
||||||
for _, a := range all {
|
for _, a := range all {
|
||||||
if l.start == a.start && l.size == a.size {
|
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")
|
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++ {
|
for j := i + 1; j < len(all); j++ {
|
||||||
end1 := all[i].start + uint64(all[i].size)
|
end1 := all[i].start + uint64(all[i].size)
|
||||||
end2 := all[j].start + uint64(all[j].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),
|
(all[j].start >= all[i].start && all[j].start < end1),
|
||||||
"ranges %v and %v overlap", all[i], all[j])
|
"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 {
|
mmmm.lmdbEnv.View(func(txn *lmdb.Txn) error {
|
||||||
@@ -382,6 +399,8 @@ func FuzzDefragment(f *testing.F) {
|
|||||||
err := mmmm.Defragment(param)
|
err := mmmm.Defragment(param)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
verifyFreeRangesInvariants(t, mmmm)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user