예제 #1
0
        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();
            }
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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);
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }
예제 #7
0
        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);
        }