예제 #1
0
        public void CantCloneContents()
        {
            var bag1 = new Bag <NotCloneable>
            {
                new NotCloneable(),
                new NotCloneable()
            };

            var bag2 = bag1.CloneContents();
        }
예제 #2
0
        public void CloneContents()
        {
            var bag1 = new Bag <MyInt>();

            MyInt mi = new MyInt(9);

            bag1.Add(new MyInt(14));
            bag1.Add(new MyInt(143));
            bag1.Add(new MyInt(2));
            bag1.Add(mi);
            bag1.Add(null);
            bag1.Add(new MyInt(14));
            bag1.Add(new MyInt(111));
            bag1.Add(mi);
            Bag <MyInt> bag2 = bag1.CloneContents();

            CompareClones(bag1, bag2);

            var bag3 = new Bag <int>(new int[] { 144, 1, 5, 23, 1, 8 });
            var bag4 = bag3.CloneContents();

            CompareClones(bag3, bag4);

            var bag5 = new Bag <UtilFixture.CloneableStruct>
            {
                new UtilFixture.CloneableStruct(143),
                new UtilFixture.CloneableStruct(1),
                new UtilFixture.CloneableStruct(23),
                new UtilFixture.CloneableStruct(1),
                new UtilFixture.CloneableStruct(8)
            };
            var bag6 = bag5.CloneContents();

            Assert.AreEqual(bag5.Count, bag6.Count);

            // Check that the bags are equal, but not identical (e.g., have been cloned via ICloneable).
            foreach (var item in bag5)
            {
                var found = 0;
                foreach (var other in bag6)
                {
                    if (Equals(item, other))
                    {
                        found += 1;
                        // Assert.IsFalse(item.Identical(other));
                    }
                }
                Assert.AreEqual(bag5.NumberOfCopies(item), found);
            }
        }