diff --git a/eventstore/mmm/freeranges_test.go b/eventstore/mmm/freeranges_test.go index 86f21c1..645d969 100644 --- a/eventstore/mmm/freeranges_test.go +++ b/eventstore/mmm/freeranges_test.go @@ -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) } } }