public void DeepClone_ListBaseCollectionNonGeneric_AsReference(TypeModel model)
		{
			var item = new ItemClass() { Message = "Hi" };

			var inner = new ListBaseCollectionNonGeneric()
			{
			    item,
			    new ItemClass() { Message = "There bro" },
				null,
				item
			};

			var obj = new ListBaseCollectionWrapper<IItemClass>()
			{
				NonGenericCollection = inner
			};

			var clone = (ListBaseCollectionWrapper<IItemClass>)model.DeepClone(obj);

			Assert.AreEqual(obj.NonGenericCollection.Count, clone.NonGenericCollection.Count);
			Assert.AreEqual(obj.NonGenericCollection[0].Message, clone.NonGenericCollection[0].Message);
			Assert.AreEqual(obj.NonGenericCollection[1].Message, clone.NonGenericCollection[1].Message);
			Assert.IsNull(obj.NonGenericCollection[2]);
			Assert.AreEqual(obj.NonGenericCollection[3].Message, clone.NonGenericCollection[3].Message);

			Assert.IsTrue(object.ReferenceEquals(obj.NonGenericCollection[0], obj.NonGenericCollection[3]), "Original Reference failed");
			Assert.IsTrue(object.ReferenceEquals(clone.NonGenericCollection[0], clone.NonGenericCollection[3]), "Clone Reference failed");
		}
		public void DeepClone_ListBaseCollectionRefDefinedBefore_AsReference(TypeModel model)
		{
			var itemClass = new ItemClass() { Message = "Hi" };

			var inner = new ListBaseCollection<IItemClass>
			{
			    itemClass,
			    itemClass
			};

			var obj = new ListBaseCollectionWrapper<IItemClass>()
			{
				AItem = itemClass,
				Collection = inner
			};

			var clone = (ListBaseCollectionWrapper<IItemClass>)model.DeepClone(obj);

			Assert.AreEqual(obj.AItem.Message, clone.AItem.Message);

			Assert.AreEqual(obj.Collection.Count, clone.Collection.Count);
			Assert.AreEqual(obj.Collection[0].Message, clone.Collection[0].Message);
			Assert.AreEqual(obj.Collection[1].Message, clone.Collection[1].Message);

			Assert.IsTrue(object.ReferenceEquals(obj.AItem, obj.Collection[0]), "Original reference Item-Collection failed");
			Assert.IsTrue(object.ReferenceEquals(obj.Collection[0], obj.Collection[1]), "Original reference Collection-Collection failed");

			Assert.IsTrue(object.ReferenceEquals(clone.AItem, clone.Collection[0]), "Clone reference Item-Collection not maintained");
			Assert.IsTrue(object.ReferenceEquals(clone.Collection[0], clone.Collection[1]), "Clone reference Collection-Collection not maintained");
		}
		public void DeepClone_ListBaseCollection_AsReference(TypeModel model)
		{
			var inner = new ListBaseCollection<IItemClass>
			{
			    new ItemClass() { Message = "Hi" },
			    new ItemClass() { Message = "There bro" }
			};

			var obj = new ListBaseCollectionWrapper<IItemClass>()
			{
				Collection = inner
			};

			var clone = (ListBaseCollectionWrapper<IItemClass>)model.DeepClone(obj);

			Assert.AreEqual(obj.Collection.Count, clone.Collection.Count);
			Assert.AreEqual(obj.Collection[0].Message, clone.Collection[0].Message);
			Assert.AreEqual(obj.Collection[1].Message, clone.Collection[1].Message);
		}