public void TestRoundTripOuterRef() { OuterRef outer = new OuterRef { InnerRef = new InnerRef { Int32 = 123, String = "abc" }, InnerVal = new InnerVal { Int32 = 456, String = "def" } }, clone; var model = CreateModel(); clone = (OuterRef)model.DeepClone(outer); Assert.AreNotSame(outer, clone); Assert.AreEqual(123, clone.InnerRef.Int32); Assert.AreEqual("abc", clone.InnerRef.String); Assert.AreEqual(456, clone.InnerVal.Int32); Assert.AreEqual("def", clone.InnerVal.String); model.CompileInPlace(); clone = (OuterRef)model.DeepClone(outer); Assert.AreNotSame(outer, clone); Assert.AreEqual(123, clone.InnerRef.Int32); Assert.AreEqual("abc", clone.InnerRef.String); Assert.AreEqual(456, clone.InnerVal.Int32); Assert.AreEqual("def", clone.InnerVal.String); clone = (OuterRef)model.Compile().DeepClone(outer); Assert.AreNotSame(outer, clone); Assert.AreEqual(123, clone.InnerRef.Int32); Assert.AreEqual("abc", clone.InnerRef.String); Assert.AreEqual(456, clone.InnerVal.Int32); Assert.AreEqual("def", clone.InnerVal.String); }