public void DeepClone_NestedGenericLevel1(TypeModel model)
		{
			var obj = new NestedClassTestsWrapper()
			{
				NestedGenericLevel1 = new NestedGenericLevel1<IItemClass>(new ItemClass() { Message = "Hello !" })
			};

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

			Assert.AreEqual(obj.NestedGenericLevel1.ToString(), clone.NestedGenericLevel1.ToString());
		}
		public void DeepClone_NestedGenericLevelDictionaryBaseType(TypeModel model)
		{
			var dictionary = new Dictionary<int, DateTime>() { { 12, new DateTime(2033, 2, 5) }, { 45, new DateTime(2000, 1, 4) } };

			var obj = new NestedClassTestsWrapper()
			{
				NestedGenericLevelDictionaryBaseType = new NestedGenericLevelDictionaryBaseType(dictionary)
			};

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

			Assert.AreEqual(obj.NestedGenericLevelDictionaryBaseType.ToString(), clone.NestedGenericLevelDictionaryBaseType.ToString());
		}
		public void DeepClone_NestedGenericLevelStruct(TypeModel model)
		{
			var obj = new NestedClassTestsWrapper()
			{
				NestedGenericLevelStruct =
					new NestedGenericLevelStruct<double>(
						12.0,
						45,
						"Hi, nice to meet you",
						new Dictionary<int, double>() { { 1, 2.0 }, { 40, 50.8 } },
						new Dictionary<string, string>() { { "hi", "yes" }, { "man", "no" }, { "what's up?", "maybe" } },
						new Dictionary<double, string>() { { 20.40, "cookies" }, { 50.1222, "with coffee" } },
						new List<string>() { "Everybody", "loves      ", "     Raymond" },
						new List<double>() { 304.56, 11103.566, -120303.12 })
			};

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

			Assert.AreEqual(obj.NestedGenericLevelStruct.ToString(), clone.NestedGenericLevelStruct.ToString());
		}
		public void DeepClone_NestedGenericLevelStructWithInnerGeneric(TypeModel model)
		{
			var obj = new NestedClassTestsWrapper()
			{
				NestedGenericLevelStructWithInnerGeneric =
					new NestedGenericLevelStructWithInnerGeneric<DateTime>(
						new ItemClass() { Message = "One two" },
						new ItemClass() { Message = "three go!" },
						new DateTime(1995, 01, 01))
			};

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

			Assert.AreEqual(obj.NestedGenericLevelStructWithInnerGeneric.ToString(), clone.NestedGenericLevelStructWithInnerGeneric.ToString());
		}
		public void DeepClone_NestedWithNestedPrivateSubTyping(TypeModel model)
		{
			var obj = new NestedClassTestsWrapper()
			{
				NestedWithNestedPrivateSubTyping =
					new NestedWithNestedPrivateSubTyping<ItemClass>(
						new ItemClass() { Message = "One two" },
						new ItemClass() { Message = "three go!" })
			};

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

			Assert.AreEqual(obj.NestedWithNestedPrivateSubTyping.ToString(), clone.NestedWithNestedPrivateSubTyping.ToString());
		}