public void InsertNonOverlappingAtEnd() { var tree = MergedIntervalTree.Create(ExistingIntervals); var target = new ClosedOpenInterval <uint>(ExistingIntervals.Last().Stop, uint.MaxValue); tree.Add(target); MultiAssert.Equal(ExistingIntervals.Count + 1, tree.Count()); MultiAssert.Equal(target, tree.Last()); // subtract back the stuff we added to get leftovers. var fpTree = MergedIntervalTree.Create <uint>(); foreach (var interval in tree) { var overlaps = ExistingTree.Search(interval).ToList(); if (overlaps.Count == 0) { fpTree.Add(interval); } else { fpTree.AddRange(interval.Subtract(overlaps)); } } MultiAssert.Equal(1, fpTree.Count()); MultiAssert.Equal(target.GetLength(), fpTree.FirstOrDefault()?.GetLength()); MultiAssert.AssertAll(); }
public void InsertTotallyOverlappingBecomesOneInterval() { var tree = MergedIntervalTree.Create(ExistingIntervals); var target = new ClosedOpenInterval <uint>(ExistingIntervals[0].Stop - 1, ExistingIntervals.Last().Start + 1); tree.Add(target); MultiAssert.Equal(1, tree.Count()); MultiAssert.Equal(ExistingIntervals.First().Start, tree.First().Start); MultiAssert.Equal(ExistingIntervals.Last().Stop, tree.Last().Stop); // subtract back the stuff we added to get leftovers. var fpTree = MergedIntervalTree.Create <uint>(); foreach (var interval in tree) { var overlaps = ExistingTree.Search(interval).ToList(); if (overlaps.Count == 0) { fpTree.Add(interval); } else { fpTree.AddRange(interval.Subtract(overlaps)); } } // should be one less since it's the # of gaps MultiAssert.Equal(ExistingIntervals.Count - 1, fpTree.Count()); MultiAssert.AssertAll(); }
public void InsertSameTreeSlightlyExpandedIntervalsIntoTree() { var tree = MergedIntervalTree.Create(ExistingIntervals); var newIntervals = new List <IInterval <uint> >(); foreach (var target in ExistingIntervals) { var interval = ClosedOpenInterval <uint> .Create(target.Start - 1, target.IsStartInclusive, target.Stop + 1, target.IsStopInclusive); tree.Add(interval); newIntervals.Add(interval); } // non-overlapping should have one more interval Assert.True(newIntervals.SequenceEqual(tree)); }
public void InsertSameTreeSlightlyExpandedIntervalsIntoTree() { var tree = MergedIntervalTree.Create(ExistingIntervals); var newIntervals = new List <IInterval <uint> >(); foreach (var target in ExistingIntervals) { var interval = ClosedOpenInterval <uint> .Create(target.Start - 1, target.IsStartInclusive, target.Stop + 1, target.IsStopInclusive); tree.Add(interval); newIntervals.Add(interval); } // non-overlapping should have one more interval MultiAssert.True(newIntervals.SequenceEqual(tree)); // subtract back the stuff we added to get leftovers. var fpTree = MergedIntervalTree.Create <uint>(); foreach (var interval in tree) { var overlaps = ExistingTree.Search(interval).ToList(); if (overlaps.Count == 0) { fpTree.Add(interval); } else { fpTree.AddRange(interval.Subtract(overlaps)); } } // double since we basically add a 1-length interval on each side. MultiAssert.Equal(ExistingIntervals.Count * 2, fpTree.Count()); MultiAssert.AssertAll(); }
public void InsertIntervalBarelyOverlappingFirstTwoInterval() { var tree = MergedIntervalTree.Create(ExistingIntervals); var target = new ClosedOpenInterval <uint>(ExistingIntervals[0].Stop - 1, ExistingIntervals[1].Start + 1); tree.Add(target); // insert one, but remove 2 would be net of - 1 MultiAssert.Equal(ExistingIntervals.Count - 1, tree.Count()); MultiAssert.Equal(ExistingIntervals.First().Start, tree.First().Start); // overlapping the two first ones means the second's stop is the stop of first in tree MultiAssert.Equal(ExistingIntervals.Skip(1).First().Stop, tree.First().Stop); // subtract back the stuff we added to get leftovers. var fpTree = MergedIntervalTree.Create <uint>(); foreach (var interval in tree) { var overlaps = ExistingTree.Search(interval).ToList(); if (overlaps.Count == 0) { fpTree.Add(interval); } else { fpTree.AddRange(interval.Subtract(overlaps)); } } // since only 2 overlapped, those 2 get removed, while 1 gets added. MultiAssert.Equal(1, fpTree.Count()); // gets trimmed by 2 since we overlap 2 intervals MultiAssert.Equal(target.GetLength() - 2, fpTree.FirstOrDefault()?.GetLength()); MultiAssert.AssertAll(); }