public void CantCloneContents() { var bag1 = new Bag <NotCloneable> { new NotCloneable(), new NotCloneable() }; var bag2 = bag1.CloneContents(); }
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); } }