public void DeepClone_DictionaryBaseCollectionAsProperty_AsReference(TypeModel model)
		{
			var assignableItem = new AssignableItem() { Test = "Test" };

			var obj = new BaseCollectionWrapper()
			{
				LookupItems = new LookupItems()
				{
				    { "1-2-3", assignableItem },				    
					{ "null", null },
					{ "4-5-6", assignableItem },         		
				}
			};

			var clone = (BaseCollectionWrapper)model.DeepClone(obj);

			Assert.AreEqual(3, clone.LookupItems.Count);
			Assert.AreEqual(obj.LookupItems["1-2-3"].Test, clone.LookupItems["1-2-3"].Test);
			Assert.AreEqual(obj.LookupItems["4-5-6"].Test, clone.LookupItems["4-5-6"].Test);
			Assert.IsNull(clone.LookupItems["null"]);

			Assert.IsTrue(object.ReferenceEquals(obj.LookupItems["1-2-3"], obj.LookupItems["4-5-6"]), "Original Reference failed");
			Assert.IsTrue(object.ReferenceEquals(clone.LookupItems["1-2-3"], clone.LookupItems["4-5-6"]), "Clone reference not maintained");
		}
		public void DeepClone_ListBaseCollectionAsProperty_AsReference(TypeModel model)
		{
			var assignableItem = new AssignableItem() { Test = "Test" };

			var obj = new BaseCollectionWrapper()
			{
				AssignableItems = new AssignableItems()
				{
				    assignableItem,
					null,
					assignableItem
				}
			};

			var clone = (BaseCollectionWrapper)model.DeepClone(obj);

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

			Assert.IsTrue(object.ReferenceEquals(obj.AssignableItems[0], obj.AssignableItems[2]), "Original Reference failed");
			Assert.IsTrue(object.ReferenceEquals(clone.AssignableItems[0], clone.AssignableItems[2]), "Clone reference not maintained");
		}