Example #1
0
        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));
            }
        }
Example #2
0
        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));
                }
            }
        }