public void Stress_Test() { const int iterations = 100; var random = new Random(0); var selection = new List <IndexRange>(); var expected = new List <int>(); IndexRange Generate() { var start = random.Next(100); return(new IndexRange(start, start + random.Next(20))); } for (var i = 0; i < iterations; ++i) { var toAdd = random.Next(5); for (var j = 0; j < toAdd; ++j) { var range = Generate(); IndexRange.Add(selection, range); for (var k = range.Begin; k <= range.End; ++k) { if (!expected.Contains(k)) { expected.Add(k); } } var actual = IndexRange.EnumerateIndices(selection).ToList(); expected.Sort(); Assert.Equal(expected, actual); } var toRemove = random.Next(5); for (var j = 0; j < toRemove; ++j) { var range = Generate(); IndexRange.Remove(selection, range); for (var k = range.Begin; k <= range.End; ++k) { expected.Remove(k); } var actual = IndexRange.EnumerateIndices(selection).ToList(); Assert.Equal(expected, actual); } selection.Clear(); expected.Clear(); } }
public void Remove_Should_Do_Nothing_For_Unselected_Range() { var ranges = new List <IndexRange> { new IndexRange(8, 10) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(2, 4), deselected); Assert.Equal(0, result); Assert.Equal(new[] { new IndexRange(8, 10) }, ranges); Assert.Empty(deselected); }
public void Remove_Should_Remove_Multiple_And_Partial_Ranges_3() { var ranges = new List <IndexRange> { new IndexRange(8, 10), new IndexRange(12, 14), new IndexRange(16, 18) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(9, 13), deselected); Assert.Equal(4, result); Assert.Equal(new[] { new IndexRange(8, 8), new IndexRange(14, 14), new IndexRange(16, 18) }, ranges); Assert.Equal(new[] { new IndexRange(9, 10), new IndexRange(12, 13) }, deselected); }
public void Remove_Should_Remove_Multiple_Ranges() { var ranges = new List <IndexRange> { new IndexRange(8, 10), new IndexRange(12, 14), new IndexRange(16, 18) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(6, 15), deselected); Assert.Equal(6, result); Assert.Equal(new[] { new IndexRange(16, 18) }, ranges); Assert.Equal(new[] { new IndexRange(8, 10), new IndexRange(12, 14) }, deselected); }
public void Remove_Should_Remove_Middle_Of_Range() { var ranges = new List <IndexRange> { new IndexRange(10, 20) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(12, 16), deselected); Assert.Equal(5, result); Assert.Equal(new[] { new IndexRange(10, 11), new IndexRange(17, 20) }, ranges); Assert.Equal(new[] { new IndexRange(12, 16) }, deselected); }
public void Remove_Should_Remove_Overlapping_End_Of_Range() { var ranges = new List <IndexRange> { new IndexRange(8, 12) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(10, 14), deselected); Assert.Equal(3, result); Assert.Equal(new[] { new IndexRange(8, 9) }, ranges); Assert.Equal(new[] { new IndexRange(10, 12) }, deselected); }
public void Remove_Should_Remove_Start_Of_Range() { var ranges = new List <IndexRange> { new IndexRange(8, 12) }; var deselected = new List <IndexRange>(); var result = IndexRange.Remove(ranges, new IndexRange(8, 10), deselected); Assert.Equal(3, result); Assert.Equal(new[] { new IndexRange(11, 12) }, ranges); Assert.Equal(new[] { new IndexRange(8, 10) }, deselected); }