示例#1
0
        [Test] public void  UniqueCopy_List_Predicate_RandomAccessIterator()
        {
            RandomAccessIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <string> result = Algorithm.UniqueCopy(src, destIter, delegate(string lhs, string rhs) { return(lhs == rhs); });

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Position);
            Assert.AreEqual(MARKER, (result as ListIterator <string>).Read());
        }
示例#2
0
        [Test] public void UniqueCopy_Comparer_RandomAccessIterator()
        {
            RandomAccessIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <string> result = Algorithm.UniqueCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter, EqualityComparer <string> .Default);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Position);
            Assert.AreEqual(MARKER, result.Read());
        }
示例#3
0
        [Test] public void UniqueCopy_List_RandomAccessIterator()
        {
            RandomAccessIterator <string> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <string> result = Algorithm.UniqueCopy(src, destIter);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Position);
            Assert.AreEqual(MARKER, result.Read());
        }
示例#4
0
        [Test] public void RemoveCopyIf_List_RandomAccessIterator()
        {
            RandomAccessIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <int> result = Algorithm.RemoveCopyIf(src, destIter, Is29);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, result.Position);
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
示例#5
0
        [Test] public void RemoveCopy_Comparer_RandomAccessIterator()
        {
            RandomAccessIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <int> result = Algorithm.RemoveCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter, 29, EqualityComparer <int> .Default);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(src.Length - 3, result.Position);
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
示例#6
0
        [Test] public void UniqueCopy_RandomAccessIterator()
        {
            RandomAccessIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <int> result = Algorithm.UniqueCopy(IteratorUtil.Begin(src), IteratorUtil.End(src), destIter);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Position);
            Assert.AreEqual(Int32.MinValue, result.Read());
        }
示例#7
0
        [Test] public void  UniqueCopy_List_Comparer_RandomAccessIterator()
        {
            RandomAccessIterator <int> destIter = IteratorUtil.Begin(dest);

            destIter.MoveNext();

            RandomAccessIterator <int> result = Algorithm.UniqueCopy(src, destIter, EqualityComparer <int> .Default);

            VerifyOutput();
            Assert.IsNotNull(result);
            Assert.AreEqual(6, result.Position);
            Assert.AreEqual(Int32.MinValue, (result as ListIterator <int>).Read());
        }
示例#8
0
        public static bool Equal <T>(RandomAccessIterator <T> begin, RandomAccessIterator <T> end, RandomAccessIterator <T> cmpBegin, RandomAccessIterator <T> cmpEnd, IComparer <T> comparer)
        {
            if (IteratorUtil.Distance(begin, end) != IteratorUtil.Distance(cmpBegin, cmpEnd))
            {
                return(false);
            }

            for (; !begin.Equals(end) && !cmpBegin.Equals(cmpEnd); begin.MoveNext(), cmpBegin.MoveNext())
            {
                T t1 = begin.Read();
                T t2 = cmpBegin.Read();
                if (comparer.Compare(t1, t2) != 0)
                {
                    return(false);
                }
            }

            return(true);
        }
示例#9
0
        static public void RandomShuffle <T>(RandomAccessIterator <T> begin, RandomAccessIterator <T> end, RandomShuffleFunc func)
        {
            if (begin.Equals(end))
            {
                return;
            }

            begin = IteratorUtil.Clone(begin);
            for (RandomAccessIterator <T> iter = IteratorUtil.AdvanceCopy(begin, 1); !iter.Equals(end); iter.MoveNext())
            {
                begin.Position = func(iter.Position + 1);
                IteratorUtil.Swap(iter, begin);
            }
        }