private void AssertEqualSegmentations(GenomeSegmentationResults expected, GenomeSegmentationResults actual) { Assert.Equal(expected.SegmentByChr.Keys.ToHashSet(), actual.SegmentByChr.Keys.ToHashSet()); foreach (var chr in expected.SegmentByChr.Keys) { IEqualityComparer <Segment> segmentComparer = new SegmentEqualityComparer(); Assert.Equal(expected.SegmentByChr[chr], actual.SegmentByChr[chr], segmentComparer); } }
public static void AddRelatedPairsRecursive <T>(IList <T> relatedPairs, List <T> unhandledPairs) where T : ISegmentPair { var segmentEqualityComparer = new SegmentEqualityComparer(); var relatedDictionary = new Dictionary <SegmentProxy, SegmentProxy>(segmentEqualityComparer); foreach (T relatedPair in relatedPairs) { AddSegmentKeys(relatedDictionary, relatedPair); } bool newAddedToRelated = true; List <T> candidates = unhandledPairs; while (newAddedToRelated) { newAddedToRelated = false; var newlyUnhandledPairs = new List <T>(candidates.Count); foreach (T unhandledPair in candidates) { if (relatedDictionary.ContainsKey(unhandledPair.BaseSegment)) { newAddedToRelated |= AddSegmentKeys(relatedDictionary, unhandledPair); relatedPairs.Add(unhandledPair); } else if (relatedDictionary.ContainsKey(unhandledPair.RelatedSegment)) { newAddedToRelated |= AddSegmentKeys(relatedDictionary, unhandledPair); relatedPairs.Add(unhandledPair); } else { newlyUnhandledPairs.Add(unhandledPair); } } candidates = newlyUnhandledPairs; } unhandledPairs.Clear(); unhandledPairs.AddRange(candidates); }