コード例 #1
0
ファイル: DequeFixture.cs プロジェクト: 15831944/NFramework
        public void RandomInsertDeleteRange()
        {
            const int ITER = 2000, LOOP = 15;
            Random    rand = new Random(13);

            for (int loop = 0; loop < LOOP; ++loop)
            {
                Deque <int> deque = new Deque <int>();
                List <int>  list  = new List <int>();
                for (int iter = 0; iter < ITER; ++iter)
                {
                    //Console.Write("Loop {0}, Iteration {1}: ", loop, iter);
                    if (rand.Next(100) < 45)
                    {
                        // remove a range.
                        if (list.Count > 0)
                        {
                            int index = rand.Next(list.Count);
                            int count = rand.Next(list.Count - index);
                            //Console.WriteLine("RemoveAt({0}, {1})", index, count);
                            list.RemoveRange(index, count);
                            deque.RemoveRange(index, count);
                        }
                    }
                    else
                    {
                        // Add an range.
                        int   index = rand.Next(list.Count + 1);
                        int   count = rand.Next(10);
                        int[] items = new int[count];
                        for (int i = 0; i < count; ++i)
                        {
                            items[i] = rand.Next(1000);
                        }

                        /*Console.Write("Insert({0}, {{", index);
                         *                      for (int i = 0; i < count; ++i) {
                         *                              if (i > 0)
                         *                                      Console.Write(", ");
                         *                              Console.Write(items[i]);
                         *                      }
                         *                      Console.WriteLine("})"); */

                        IEnumerable <int> e = (rand.Next(2) == 0) ? AlgorithmsTests.EnumerableFromArray(items) : items;
                        list.InsertRange(index, e);
                        deque.InsertRange(index, e);
                    }

                    //deque.Print();
                    CheckListAndDeque(list, deque);
                }

                InterfaceTests.TestReadWriteList <int>(deque, list.ToArray());
            }
        }
コード例 #2
0
ファイル: DequeFixture.cs プロジェクト: 15831944/NFramework
        public void CloneContents()
        {
            var deque1 = new Deque <MyInt>();

            deque1.Add(new MyInt(143));
            deque1.Add(new MyInt(2));
            deque1.AddToFront(new MyInt(9));
            deque1.Add(null);
            deque1.AddToFront(new MyInt(2));
            deque1.Add(new MyInt(111));

            var deque2 = deque1.CloneContents();

            CompareClones(deque1, deque2);

            var deque3 = new Deque <int>(new int[] { 144, 5, 23 });

            deque3.InsertRange(1, new int[] { 7, 5, 11, 109 });

            var deque4 = deque3.CloneContents();

            CompareClones(deque3, deque4);

            var deque5 = new Deque <UtilFixture.CloneableStruct>();

            deque5.Add(new UtilFixture.CloneableStruct(143));
            deque5.AddToFront(new UtilFixture.CloneableStruct(5));
            deque5.Add(new UtilFixture.CloneableStruct(23));
            deque5.AddToFront(new UtilFixture.CloneableStruct(1));
            deque5.AddToFront(new UtilFixture.CloneableStruct(8));

            var deque6 = deque5.CloneContents();

            Assert.AreEqual(deque5.Count, deque6.Count);

            // Check that the deques are equal, but not identical (e.g., have been cloned via ICloneable).
            IEnumerator <UtilFixture.CloneableStruct> e1 = deque5.GetEnumerator();
            IEnumerator <UtilFixture.CloneableStruct> e2 = deque6.GetEnumerator();

            // Check that the deques are equal, but not reference equals (e.g., have been cloned).
            while (e1.MoveNext())
            {
                e2.MoveNext();
                Assert.IsTrue(e1.Current.Equals(e2.Current));
                Assert.IsFalse(e1.Current.Identical(e2.Current));
            }
        }