static void AssertValuesEqual(ContainerV1 clone, ContainerV2 obj)
 {
     Assert.That(clone.Value1, Is.EqualTo(obj.Value1));
     Assert.That(clone.Value2, Is.EqualTo(obj.Value2));
     Assert.That(clone.Value3, Is.EqualTo(obj.Value3));
     Assert.That(clone.Value4, Is.EqualTo(obj.Value4));
     Assert.That(clone.Value5, Is.EqualTo(obj.Value5));
     Assert.That(clone.Value6, Is.EqualTo(obj.Value6));
 }
        public void ExecuteValuesReversed()
        {
            var         tm  = TypeModel.Create();
            ContainerV2 obj = MakeWithRefs2();

            ContainerV1 clone = tm.ChangeType <ContainerV2, ContainerV1>(obj);

            AssertValuesEqual(clone, obj);

            // was serialized as ref
            Assert.That(clone.Value6, Is.SameAs(clone.Value4));
        }
        public void ExecuteValues()
        {
            var         tm  = TypeModel.Create();
            ContainerV1 obj = MakeWithRefs();

            ContainerV2 clone = tm.ChangeType <ContainerV1, ContainerV2>(obj);

            AssertValuesEqual(clone, obj);

            // was serialized not as ref
            Assert.That(clone.Value6, Is.Not.SameAs(clone.Value4));
        }
        static ContainerV2 MakeWithRefs2()
        {
            var obj = new ContainerV2()
            {
                Value1 = "abc",
                Value2 = "def",
                Value4 = new Custom(1),
                Value5 = new Custom(2),
            };

            obj.Value3 = obj.Value1;
            obj.Value6 = obj.Value4;
            return(obj);
        }