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 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(); }