public void Test_GetAllQuantitiesByName_SameProductMultipleTimes_DiferentListsLength() { var firstList = new List <ProductQuantity> { new ProductQuantity("pears", 3), new ProductQuantity("pears", 5), new ProductQuantity("pears", 5), new ProductQuantity("apples", 1), }; var secondList = new List <ProductQuantity> { new ProductQuantity("apples", 4), new ProductQuantity("pears", 1), new ProductQuantity("pears", 2), new ProductQuantity("pears", 5), new ProductQuantity("apples", 5) }; var merger = new ListMerger(firstList, secondList).GetAllQuantitiesByName(); var expectedList = new List <ProductQuantity> { new ProductQuantity("apples", 21), new ProductQuantity("pears", 10) }; Assert.Equal(expectedList, merger); }
private void Visit(ElementMapping <AttributeGroup> attribute) { WriteElement(attribute, ag => { foreach (var attr in ag.Attributes) { _formatter.WriteAttribute(attr); } }, (ag1, ag2) => { // TODO: Need to insert the newlines and indentions, perhaps support GetTokenList(IEnumerable<ICustomAttribute>) var attributeComparer = new AttributeComparer(); var ag1Tokens = ag1.Attributes.OrderBy(c => c, attributeComparer) .SelectMany(c => _declHelper.GetTokenList(c)); var ag2Tokens = ag2.Attributes.OrderBy(c => c, attributeComparer) .SelectMany(c => _declHelper.GetTokenList(c)); foreach (var token in ListMerger.MergeLists(ag1Tokens, ag2Tokens)) { WriteElement(token, t => { _syntaxWriter.WriteSyntaxToken(t); }, (t1, t2) => { using (_syntaxWriter.StartStyle(SyntaxStyle.Removed)) _syntaxWriter.WriteSyntaxToken(t1); using (_syntaxWriter.StartStyle(SyntaxStyle.Added)) _syntaxWriter.WriteSyntaxToken(t2); }, false); } }, true); }
public IEnumerable <Tuple <DifferenceType, SyntaxToken> > GetTokenDiff(IDefinition def1, IDefinition def2) { SyntaxToken[] t1 = GetTokenList(def1).ToArray(); SyntaxToken[] t2 = GetTokenList(def2).ToArray(); int t1Start = 0; int t2Start = 0; List <Tuple <DifferenceType, SyntaxToken> > merged = new List <Tuple <DifferenceType, SyntaxToken> >(); //TODO: Consider splitting by lines as well to help with the attribute diffing // Split the token list at identifiers to help with the merge line up so that we don't get large // diffing churn in the output. while (t1Start < t1.Length && t2Start < t2.Length) { int t1End = Array.FindIndex(t1, t1Start, s => s.Type == SyntaxTokenType.Identifier); int t2End = Array.FindIndex(t2, t2Start, s => s.Type == SyntaxTokenType.Identifier); if (t1End < 0 || t2End < 0) { break; } merged.AddRange(ListMerger.Merge(t1, t1Start, t1End + 1, t2, t2Start, t2End + 1)); t1Start = t1End + 1; t2Start = t2End + 1; } // Finish any leftover work from either side. merged.AddRange(ListMerger.Merge(t1, t1Start, t1.Length, t2, t2Start, t2.Length)); return(merged); }
public void Merge(FeedManager newFeedManager) { ItemLifetime = newFeedManager.ItemLifetime; MaxItemsLimit = newFeedManager.MaxItemsLimit; ListMerger.Merge(newFeedManager.Feeds, Feeds, FeedEqualityComparer.Default); foreach (var feed in Feeds) { var newFeed = newFeedManager.Feeds.Single(x => x.Uri == feed.Uri); feed.UpdateItems(newFeed.Items, cloneItemsBeforeInsert: true); } }
private void MergeTestCore <T>(IList <T> source, IList <T> target, ExpectedCollectionChange expectedCollectionChange, IEqualityComparer <T> comparer = null) { var insertCounter = 0; var removeCounter = 0; var resetCounter = 0; Action <int, T> insertAction = (idx, item) => insertCounter++; Action <int> removeAction = idx => removeCounter++; Action resetAction = () => resetCounter++; ListMerger.Merge(new ReadOnlyCollection <T>(source), target, comparer, insertAction, removeAction, resetAction); Assert.AreEqual(expectedCollectionChange == ExpectedCollectionChange.Insert ? 1 : 0, insertCounter); Assert.AreEqual(expectedCollectionChange == ExpectedCollectionChange.Remove ? 1 : 0, removeCounter); Assert.AreEqual(expectedCollectionChange == ExpectedCollectionChange.Reset ? 1 : 0, resetCounter); }
public virtual FacetIterator GetIterator() { IDictionary <string, string> props = m_sel == null ? null : m_sel.SelectionProperties; int depth = PathFacetHandler.GetDepth(props); bool strict = PathFacetHandler.IsStrict(props); List <BrowseFacet> finalList; string[] paths = m_sel == null ? null : m_sel.Values; if (paths == null || paths.Length == 0) { finalList = new List <BrowseFacet>(GetFacetsForPath(null, depth, strict, int.MinValue, m_count.Length)); return(new PathFacetIterator(finalList)); } if (paths.Length == 1) { finalList = new List <BrowseFacet>(GetFacetsForPath(paths[0], depth, strict, int.MinValue, m_count.Length)); return(new PathFacetIterator(finalList)); } finalList = new List <BrowseFacet>(); var iterList = new List <IEnumerator <BrowseFacet> >(paths.Length); foreach (string path in paths) { var subList = GetFacetsForPath(path, depth, strict, int.MinValue, m_count.Length); if (subList.Count > 0) { iterList.Add(subList.GetEnumerator()); } } var finalIter = ListMerger.MergeLists(iterList.ToArray(), m_comparerFactory == null ? new FacetValueComparerFactory().NewComparer() : m_comparerFactory.NewComparer()); while (finalIter.MoveNext()) { BrowseFacet f = finalIter.Current; finalList.Add(f); } return(new PathFacetIterator(finalList)); }
public virtual IEnumerable <BrowseFacet> GetFacets() { IDictionary <string, string> props = _sel == null ? null : _sel.SelectionProperties; int depth = PathFacetHandler.GetDepth(props); bool strict = PathFacetHandler.IsStrict(props); string[] paths = _sel == null ? null : _sel.Values; if (paths == null || paths.Length == 0) { return(GetFacetsForPath(null, depth, strict, _minHitCount, _maxCount)); } if (paths.Length == 1) { return(GetFacetsForPath(paths[0], depth, strict, _minHitCount, _maxCount)); } List <BrowseFacet> finalList = new List <BrowseFacet>(); var iterList = new List <IEnumerator <BrowseFacet> >(paths.Length); foreach (string path in paths) { var subList = GetFacetsForPath(path, depth, strict, _minHitCount, _maxCount); if (subList.Count() > 0) { iterList.Add(subList.GetEnumerator()); } } var finalIter = ListMerger.MergeLists(iterList.ToArray(), _comparatorFactory == null ? new FacetValueComparatorFactory().NewComparator() : _comparatorFactory.NewComparator()); while (finalIter.MoveNext()) { BrowseFacet f = finalIter.Current; finalList.Insert(0, f); } return(finalList); }
public void Test_GetAllQuantitiesByName() { var firstList = new List <ProductQuantity> { new ProductQuantity("apples", 3), new ProductQuantity("pears", 5) }; var secondList = new List <ProductQuantity> { new ProductQuantity("apples", 4), new ProductQuantity("pears", 5) }; var merger = new ListMerger(firstList, secondList).GetAllQuantitiesByName(); var expectedList = new List <ProductQuantity> { new ProductQuantity("apples", 7), new ProductQuantity("pears", 10) }; Assert.Equal(expectedList, merger); }
public void MergeTestWithDefaultArguments() { var targetList = new List <string>() { "2", "3" }; ListMerger.Merge(new[] { "1", "2" }, targetList); Assert.IsTrue(new[] { "1", "2" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "1", "2" }, targetList); Assert.IsTrue(new[] { "1", "2" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "1", "3" }, targetList); Assert.IsTrue(new[] { "1", "3" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "1", "2", "3" }, targetList); Assert.IsTrue(new[] { "1", "2", "3" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "1", "2", "c", "d" }, targetList); Assert.IsTrue(new[] { "1", "2", "c", "d" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "a", "b", "c" }, targetList); Assert.IsTrue(new[] { "a", "b", "c" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "a", "b" }, targetList); Assert.IsTrue(new[] { "a", "b" }.SequenceEqual(targetList)); ListMerger.Merge(new[] { "1" }, targetList); Assert.IsTrue(new[] { "1" }.SequenceEqual(targetList)); ListMerger.Merge(new string[0], targetList); Assert.IsTrue(new string[0].SequenceEqual(targetList)); ListMerger.Merge(Array.AsReadOnly(new[] { "1" }), targetList); Assert.IsTrue(new[] { "1" }.SequenceEqual(targetList)); }
public void SetUp() { _splitter = A.Fake <ISplitter <Meeting, int> >(x => x.Strict().Named("Merger")); sut = new ListMerger <Meeting, int>(_splitter); }
private void ConfigureSut() { _sut = new ListMerger <int>(); }