public Supplier<Stream<TestOperation>> makeRemovalsRandom(int indexFrom, int indexTo, int amount) {
            if (indexTo - indexFrom < amount) {
                throw new IllegalArgumentException();
            }
            int seed = staticRandom.nextInt();
            return () -> {
                var rnd = new Random(seed);
                var indexes = Interval.of(indexFrom, indexTo);
                return IntStream.range(0, amount).mapToObj(n -> this.makeOperation("remove at offset of random entry #" + indexFrom + "-#" + (indexTo - n), true, s -> {
                    var entry = s.arrayBacked.toListOfEntries().get(rnd.nextInt(indexes.a, indexes.b));
                    s.arrayBacked.removeAt(entry.offset);
                    s.treeBacked.removeAt(entry.offset);
                    indexes.b--;
                }));
            };
        }
Test scenarios to cover OffsetKeyedTreeMap data structure

orderings (M)
 - ascending
 - descending
 - random
<p>
modification scenarios (P)
 - all insertions (n)
 - all insertions, then all remove (different series proportions n,m)
 - intermixed insertions and remove (different series proportions n,m)
 - all insertions, then apply offset at existing key
 - all insertions, then apply offset at missing key
 - intermixed insertions, remove, apply offset (different series proportions n,m,p)
 - all insertions, then removeAtRange at existing key
 - all insertions, then removeAtRange offset at missing key
 - intermixed insertions, removeAtRange, apply offset (different series proportions n,m,p)
<p>
inspection scenarios (Q)
 - find existing key
 - find missing key
 - find existing key and iterate forward/backward till the end/head
 - find missing key and iterate forward/backward till the end/head
 - random backward-forward iterations
<p>
test/org.jkiss.dbeaver.model.lsm.test/src/org/jkiss/dbeaver/model/lsm/test/OffsetKeyedTreeMapTest.java