public void InsertAt() { var builder = new ArrayBuilder <String>(); builder.Insert(0, "candy"); builder.Insert(0, "apple"); builder.Insert(2, "elephant"); builder.Insert(2, "drum"); builder.Insert(1, "banana"); builder.Insert(0, "$$$"); Assert.Equal(builder[0], "$$$"); Assert.Equal(builder[1], "apple"); Assert.Equal(builder[2], "banana"); Assert.Equal(builder[3], "candy"); Assert.Equal(builder[4], "drum"); Assert.Equal(builder[5], "elephant"); }
/// <summary> /// Combines continguous segments with lengths that are each less than or equal to the specified segment size. /// </summary> private static void CombineSegments(ArrayBuilder<SourceText> segments, int segmentSize) { for (int i = 0; i < segments.Count - 1; i++) { if (segments[i].Length <= segmentSize) { int combinedLength = segments[i].Length; // count how many contiguous segments are reducible int count = 1; for (int j = i + 1; j < segments.Count; j++) { if (segments[j].Length <= segmentSize) { count++; combinedLength += segments[j].Length; } } // if we've got at least two, then combine them into a single text if (count > 1) { var encoding = segments[i].Encoding; var algorithm = segments[i].ChecksumAlgorithm; var writer = SourceTextWriter.Create(encoding, algorithm, combinedLength); while (count > 0) { segments[i].Write(writer); segments.RemoveAt(i); count--; } var newText = writer.ToSourceText(); segments.Insert(i, newText); } } } }