public void DeepClone_ListOfClass_AsReference(TypeModel model)
		{
			var list = new ListOfClass()
			{
				Collection = new List<ItemClass> { new ItemClass() { Message = "hello" }, new ItemClass() { Message = "world" } }
			};

			var clone = (ListOfClass)model.DeepClone(list);

			Assert.AreEqual(list.Collection.Count, clone.Collection.Count);

			for (var i = 0; i < list.Collection.Count; i++)
			{
				Assert.AreEqual(list.Collection[i].Message, clone.Collection[i].Message);
			}
		}
		public void DeepClone_ListWithNullItem_AsReference(TypeModel model)
		{
			var list = new ListOfClass()
			{
				Collection = new List<ItemClass>()
				{
				    new ItemClass() { Message = "Hi there"},
					null,
					new ItemClass() { Message = "How are you ?"}
				}
			};

			var clone = (ListOfClass)model.DeepClone(list);

			Assert.AreEqual(list.Collection.Count, clone.Collection.Count);
			Assert.AreEqual(list.Collection[0].Message, clone.Collection[0].Message);
			Assert.IsNull(clone.Collection[1]);
			Assert.AreEqual(list.Collection[2].Message, clone.Collection[2].Message);
		}
		public void DeepClone_ListOfClass_NotAsReference(TypeModel model)
		{
			var manualModel = TypeModel.Create();
			manualModel.Add(typeof(ListOfClass), true).AddField(1, "Collection");
			manualModel.Add(typeof (ItemClass), true).AddField(1, "Message");

			var itemClass = new ItemClass() { Message = "hello" };

			var list = new ListOfClass()
			{
				Collection = new List<ItemClass> { itemClass, itemClass }
			};

			var clone = (ListOfClass)manualModel.DeepClone(list);

			Assert.IsTrue(object.ReferenceEquals(list.Collection[0], list.Collection[1]), "Original collection inner reference failed");
			Assert.AreEqual(list.Collection.Count, clone.Collection.Count);

			for (var i = 0; i < list.Collection.Count; i++)
			{
				Assert.AreEqual(list.Collection[i].Message, clone.Collection[i].Message);
			}
			Assert.IsFalse(object.ReferenceEquals(clone.Collection[0], clone.Collection[1]), "Clone collection inner reference failed");

			clone.Collection[0].Message = "wazuuuuup";
			Assert.AreNotEqual(clone.Collection[0].Message, clone.Collection[1].Message);
		}
		public void DeepClone_ListOfClassCheckInnerReference_AsReference(TypeModel model)
		{
			var itemClass = new ItemClass() { Message = "hello" };

			var list = new ListOfClass()
			{
				Collection = new List<ItemClass> { itemClass, itemClass }
			};

			var clone = (ListOfClass)model.DeepClone(list);

			Assert.IsTrue(object.ReferenceEquals(list.Collection[0], list.Collection[1]), "Original collection inner reference failed");
			Assert.AreEqual(list.Collection.Count, clone.Collection.Count);

			for (var i = 0; i < list.Collection.Count; i++)
			{
				Assert.AreEqual(list.Collection[i].Message, clone.Collection[i].Message);
			}
			Assert.IsTrue(object.ReferenceEquals(clone.Collection[0], clone.Collection[1]), "Clone collection inner reference failed");

			clone.Collection[0].Message = "wazuuuuup";
			Assert.AreEqual(clone.Collection[0].Message, clone.Collection[1].Message);
		}