public void ShallowCloneToMultidimentionalStructArray()
        {
            var source1 = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass {
                    FirstName = "John", LastName = "Doe"
                }
            };
            var source2 = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass {
                    FirstName = "Jane", LastName = "Smith"
                }
            };

            var source = new[, ]
            {
                {
                    source1,
                    source2
                }
            };

            var dest = new CloneTestStructWithClonableClassField[1, 2];

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(clone[0, 0].TestClass, source1.TestClass));
            Assert.IsTrue(ReferenceEquals(clone[0, 1].TestClass, source2.TestClass));
        }
        public void ShallowCloneToWillAValueType()
        {
            var testClass = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            var source = new CloneTestStructWithClonableClassField {
                TestClass = testClass
            };
            var dest = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass()
            };

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(testClass, clone.TestClass));
        }
        public void CloneToMultidimentionalStructArray()
        {
            var dest1 = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass()
            };
            var dest2 = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass()
            };

            var source = new[, ]
            {
                {
                    new CloneTestStructWithClonableClassField {
                        TestClass = new CloneTestClass {
                            FirstName = "John", LastName = "Doe"
                        }
                    },
                    new CloneTestStructWithClonableClassField {
                        TestClass = new CloneTestClass {
                            FirstName = "Jane", LastName = "Smith"
                        }
                    }
                }
            };

            var dest = new[, ]
            {
                {
                    dest1,
                    dest2
                }
            };

            var clone = source.CloneTo(dest);

            Assert.IsTrue(ReferenceEquals(clone[0, 0].TestClass, dest1.TestClass));
            Assert.IsTrue(ReferenceEquals(clone[0, 1].TestClass, dest2.TestClass));

            Assert.AreEqual("John", clone[0, 0].TestClass.FirstName);
            Assert.AreEqual("Doe", clone[0, 0].TestClass.LastName);

            Assert.AreEqual("Jane", clone[0, 1].TestClass.FirstName);
            Assert.AreEqual("Smith", clone[0, 1].TestClass.LastName);
        }
        public void ShallowCloneToMultidimentionalStructArray()
        {
            var source1 = new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "John", LastName = "Doe" } };
            var source2 = new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "Jane", LastName = "Smith" } };

            var source = new[,]
            {
                {
                    source1,
                    source2
                }
            };

            var dest = new CloneTestStructWithClonableClassField[1, 2];

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(clone[0, 0].TestClass, source1.TestClass));
            Assert.IsTrue(ReferenceEquals(clone[0, 1].TestClass, source2.TestClass));
        }
        public void CloneToMultidimentionalStructArray()
        {
            var dest1 = new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass() };
            var dest2 = new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass() };

            var source = new[,]
            {
                {
                    new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "John", LastName = "Doe" } },
                    new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "Jane", LastName = "Smith" } }
                }
            };

            var dest = new[,]
            {
                {
                    dest1,
                    dest2
                }
            };

            var clone = source.CloneTo(dest);

            Assert.IsTrue(ReferenceEquals(clone[0, 0].TestClass, dest1.TestClass));
            Assert.IsTrue(ReferenceEquals(clone[0, 1].TestClass, dest2.TestClass));

            Assert.AreEqual("John", clone[0, 0].TestClass.FirstName);
            Assert.AreEqual("Doe", clone[0, 0].TestClass.LastName);

            Assert.AreEqual("Jane", clone[0, 1].TestClass.FirstName);
            Assert.AreEqual("Smith", clone[0, 1].TestClass.LastName);
        }
        public void ShallowCloneToWillAValueType()
        {
            var testClass = new CloneTestClass {FirstName = "John", LastName = "Doe"};

            var source = new CloneTestStructWithClonableClassField { TestClass = testClass };
            var dest = new CloneTestStructWithClonableClassField {TestClass = new CloneTestClass()};

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(testClass, clone.TestClass));
        }