public void CloneStructWithSelfReferencingClass()
        {
            var selfRefClass = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            selfRefClass.InnerClass = selfRefClass;

            var source = new StructWithReferenceToSelfReferencingClass {
                Class = selfRefClass
            };

            var clone = Cloneable <StructWithReferenceToSelfReferencingClass> .Clone(source);

            var shallowClone = Cloneable <StructWithReferenceToSelfReferencingClass> .ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source.Class, clone.Class));
            Assert.IsTrue(object.ReferenceEquals(source.Class, shallowClone.Class));

            Assert.IsTrue(object.ReferenceEquals(clone.Class, clone.Class.InnerClass));
        }
        public void CloneStructWithSelfReferencingClass()
        {
            var selfRefClass = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            selfRefClass.InnerClass = selfRefClass;

            var source = new StructWithReferenceToSelfReferencingClass {Class = selfRefClass};

            var clone = Cloneable<StructWithReferenceToSelfReferencingClass>.Clone(source);
            var shallowClone = Cloneable<StructWithReferenceToSelfReferencingClass>.ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source.Class, clone.Class));
            Assert.IsTrue(object.ReferenceEquals(source.Class, shallowClone.Class));

            Assert.IsTrue(object.ReferenceEquals(clone.Class, clone.Class.InnerClass));
        }