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)); } }
private void CompareClones <T>(Deque <T> s1, Deque <T> s2) { IEnumerator <T> e1 = s1.GetEnumerator(); IEnumerator <T> e2 = s2.GetEnumerator(); Assert.IsTrue(s1.Count == s2.Count); // Check that the deques are equal, but not reference equals (e.g., have been cloned). while (e1.MoveNext()) { e2.MoveNext(); if (e1.Current == null) { Assert.IsNull(e2.Current); } else { Assert.IsTrue(e1.Current.Equals(e2.Current)); Assert.IsFalse(object.ReferenceEquals(e1.Current, e2.Current)); } } }