public void TestAppendGap()
        {
            var changes = new MergedLogSourceChanges(0);

            changes.Append(0, 2);
            changes.Append(1, 2);
            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Appended(0, 3)
            });
        }
        public void TestAppendTwice()
        {
            var changes = new MergedLogSourceChanges(101);

            changes.Append(101, 6);
            changes.Append(107, 10);
            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Appended(101, 16)
            });
        }
        public void TestAppendInvalidateAppend()
        {
            var changes = new MergedLogSourceChanges(0);

            changes.Append(0, 2);
            changes.RemoveFrom(1);
            changes.Append(1, 1);

            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Appended(0, 2)
            });
        }
        public void TestAppend()
        {
            var changes = new MergedLogSourceChanges(101);

            changes.Append(101, 5);
            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Appended(101, 5)
            });

            changes.TryGetFirstRemovedIndex(out var index).Should().BeFalse();
            index.Should().Be(LogLineIndex.Invalid);
        }
        public void TestInvalidateThenAppendWithGap()
        {
            var changes = new MergedLogSourceChanges(10);

            changes.RemoveFrom(5);
            changes.Append(7, 10);

            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Removed(5, 5),
                LogSourceModification.Appended(5, 12)
            });
        }
        public void TestInvalidateThenAppend()
        {
            var changes = new MergedLogSourceChanges(10);

            changes.RemoveFrom(5);
            changes.Append(5, 6);

            changes.Sections.Should().Equal(new object[]
            {
                LogSourceModification.Removed(5, 5),
                LogSourceModification.Appended(5, 6)
            });

            changes.TryGetFirstRemovedIndex(out var index).Should().BeTrue();
            index.Should().Be(new LogLineIndex(5));
        }