Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
        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));
        }
Esempio n. 10
0
 public void SetUp()
 {
     _splitter = A.Fake <ISplitter <Meeting, int> >(x => x.Strict().Named("Merger"));
     sut       = new ListMerger <Meeting, int>(_splitter);
 }
Esempio n. 11
0
 private void ConfigureSut()
 {
     _sut = new ListMerger <int>();
 }