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);
		}