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()); } }
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)); } }